{
  "_format": "hh-sol-artifact-1",
  "contractName": "WhiteListHandler",
  "sourceName": "contracts/V3/handler/WhiteListHandler.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        }
      ],
      "name": "EventWhiteList",
      "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"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "claimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "getClaimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "areaNameList",
          "type": "string[]"
        }
      ],
      "name": "getEngineAreaList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIOBranches",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8[]",
              "name": "inBranch",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[]",
              "name": "outBranch",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IHandler.IOBranch[]",
          "name": "branches",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getInputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getOutputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "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": "regRule",
      "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": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleConfig",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleWhiteAddressList",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613861806100206000396000f3fe608060405234801561001057600080fd5b50600436106101225760003560e01c80638129fc1c116100a85780638129fc1c1461027d5780638da5cb5b1461028557806395edcb08146102a0578063a903620c146102c0578063af84b51f146102d3578063b41bd789146102f3578063b4b7035214610306578063d0d35b5514610319578063f2fde38b1461032c578063f2fe4fa51461033f578063f96f58271461034e57600080fd5b80631cc4f041146101275780631eda6e4f1461015057806334c76b25146101925780634b2dbcb8146101c05780634b2e9b41146101c05780634b7b47d2146101f457806354fd4d50146102295780635790c2941461023a57806362329cc51461024f5780636dabaf0414610262578063715018a614610275575b600080fd5b61013b610135366004611f3d565b50600190565b60405190151581526020015b60405180910390f35b61018561015e366004612082565b50506040805160208082018352606091829052825190810190925281529695505050505050565b604051610147919061213b565b60408051808201909152600981526815da1a5d19531a5cdd60ba1b60208201525b60405161014791906121e7565b6101e76101ce3660046121fa565b5050604080516000815260208101909152949350505050565b6040516101479190612274565b6102176102023660046122c1565b60686020526000908152604090205460ff1681565b60405160ff9091168152602001610147565b60015b604051908152602001610147565b61024d6102483660046122da565b61036e565b005b6101e761025d36600461236b565b6103ef565b61013b61027036600461241b565b6104cc565b61024d610584565b61024d610598565b6033546040516001600160a01b039091168152602001610147565b6102b36102ae3660046126ac565b6106a9565b604051610147919061287c565b61024d6102ce366004612fd5565b6109ec565b6102e66102e1366004613188565b610a69565b60405161014791906132a5565b61024d610301366004613307565b610bb5565b61013b610314366004611f3d565b610cc3565b6101b361032736600461333b565b610d36565b61024d61033a36600461337e565b610d53565b606060405161014791906133d9565b61022c61035c3660046122c1565b60696020526000908152604090205481565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506066816040516103a6919061345e565b90815260405190819003602001902054336001600160a01b03909116146103e85760405162461bcd60e51b81526004016103df9061347a565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561040c5761040c611da4565b604051908082528060200260200182016040528015610435578160200160208202803683370190505b50905060005b81518110156104c5576066848281518110610458576104586134b1565b602002602001015160405161046d919061345e565b9081526040519081900360200190205482516001600160a01b039091169083908390811061049d5761049d6134b1565b6001600160a01b03909216602092830291909101909101526104be816134dd565b905061043b565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060668160405161050d919061345e565b90815260405190819003602001902054336001600160a01b03909116146105465760405162461bcd60e51b81526004016103df9061347a565b60ff841661055f5761055a87878786610dc9565b610577565b60ff8416600114156105775761057787878786610f45565b5060019695505050505050565b61058c61111f565b6105966000611179565b565b600054610100900460ff16158080156105b85750600054600160ff909116105b806105d25750303b1580156105d2575060005460ff166001145b6106355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103df565b6000805460ff191660011790558015610658576000805461ff0019166101001790555b6106606111cb565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506066816040516106fb919061345e565b90815260405190819003602001902054336001600160a01b03909116146107345760405162461bcd60e51b81526004016103df9061347a565b60008460600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561077757600080fd5b505afa15801561078b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107af91906134f8565b9050600081866060015161010001516107cb88606001516111fa565b6107d8896060015161121f565b6040516020016107eb9493929190613515565b60408051601f19818403018152918152815160209283012060008181526069909352908220549092509061082182600883611244565b905060ff811661083457505050506104c5565b6000848960600151610100015161084e8b606001516111fa565b61085b8c6060015161121f565b8c51604051610871959493929190602001613548565b60408051601f1981840301815291815281516020928301206000818152606890935291205490915060ff1660018114156108e657505060408051808201825260118152701dda1a5d19481b1a5cdd081c185cdcd959607a1b60208083019190915291880152600090870152506104c592505050565b60608a81015161010001518b51604080516001600160a01b03808c16602083015263ffffffff90941691810191909152600093810184905260808101939093521660a082015260c00160408051601f1981840301815291815281516020928301206000818152606890935291205490925060ff16905060018114156109a657505060408051808201825260118152701dda1a5d19481b1a5cdd081c185cdcd959607a1b60208083019190915291880152600090870152506104c592505050565b505060408051808201825260158152741dda1a5d19481b1a5cdd081b9bdd081c185cdcd959605a1b60208083019190915291880152600190870152505050505092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606681604051610a2b919061345e565b90815260405190819003602001902054336001600160a01b0390911614610a645760405162461bcd60e51b81526004016103df9061347a565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610aaa57600080fd5b505afa158015610abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae291906134f8565b9050600081846040015185606001518660800151876101000151604051602001610b10959493929190613548565b60408051808303601f1901815282825280516020909101206001808452838301909252925060009190816020015b6060815260200190600190039081610b3e5750506040805180820182526005815264195e1a5cdd60da1b602080830191909152600086815260689091529190912054919250610b8f9160ff16611263565b81600081518110610ba257610ba26134b1565b6020908102919091010152949350505050565b610bbd61111f565b60005b8151811015610cbf57818181518110610bdb57610bdb6134b1565b60200260200101516066838381518110610bf757610bf76134b1565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b158015610c3757600080fd5b505afa158015610c4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c739190810190613583565b604051610c80919061345e565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610cb8816134dd565b9050610bc0565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b815250606681604051610cf4919061345e565b90815260405190819003602001902054336001600160a01b0390911614610d2d5760405162461bcd60e51b81526004016103df9061347a565b50600092915050565b604080516000808252602082019092526060915b50949350505050565b610d5b61111f565b6001600160a01b038116610dc05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103df565b6106a681611179565b6000610dd6826000611344565b9050600033868686604051602001610df19493929190613515565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020549050610e32818460ff166008600061139c565b6000838152606960205260408120829055909150610e518560016113c1565b905060005b81518161ffff161015610f3a576000828261ffff1681518110610e7b57610e7b6134b1565b602002602001015190506000338b8b8b610e9486611400565b604051602001610ea8959493929190613548565b60408051601f198184030181529181528151602092830120600081815260689093529120805460ff19166001179055905063ffffffff8b16337f5c672befb1e372cf682230a693300a297b1e24971b8d2a44a5cb2a13edce4a168c8c610f0d87611400565b6001604051610f1f94939291906135f0565b60405180910390a3505080610f339061361f565b9050610e56565b505050505050505050565b6000610f52826000611344565b9050600033868686604051602001610f6d9493929190613515565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020549050610fae818460ff166008600061139c565b6000838152606960205260408120829055909150610fcd8560016113c1565b905060005b81518161ffff161015610f3a576000828261ffff1681518110610ff757610ff76134b1565b60200260200101519050600061100c8261141a565b9050600061103382600081518110611026576110266134b1565b6020026020010151611400565b9050600061105a8360018151811061104d5761104d6134b1565b602002602001015161152f565b90506000338e8e8e86604051602001611077959493929190613548565b604051602081830303815290604052805190602001209050816068600083815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508d63ffffffff16336001600160a01b03167f5c672befb1e372cf682230a693300a297b1e24971b8d2a44a5cb2a13edce4a168f8f878760405161110194939291906135f0565b60405180910390a35050505050806111189061361f565b9050610fd2565b6033546001600160a01b031633146105965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103df565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166111f25760405162461bcd60e51b81526004016103df90613641565b61059661157c565b60006112198260a00151601060006008611214919061368c565b611244565b92915050565b60006112198260a00151601060006008611239919061368c565b61121490601061368c565b91821c91600080611258600180861b6136a4565b909416949350505050565b60606000611270846115ac565b9050600061127d846115b7565b6040805160038082526080820190925291925060009190816020015b606081526020019060019003908161129957905050905082816000815181106112c4576112c46134b1565b60200260200101819052506112f4604051806040016040528060048152602001631d5a5b9d60e21b8152506115ac565b81600181518110611307576113076134b1565b60200260200101819052508181600281518110611326576113266134b1565b602002602001018190525061133a816115ca565b9695505050505050565b600080611358611353856115f5565b61141a565b9050611394611382828560ff1681518110611375576113756134b1565b602002602001015161141a565b60028151811061104d5761104d6134b1565b949350505050565b600083821b81836113b0600180881b6136a4565b901b19969096161795945050505050565b606060006113d1611353856115f5565b90506113946113ee828560ff1681518110611375576113756134b1565b600281518110611375576113756134b1565b805160009060151461141157600080fd5b6112198261152f565b606061142582611622565b61142e57600080fd5b60006114398361165b565b90506000816001600160401b0381111561145557611455611da4565b60405190808252806020026020018201604052801561149a57816020015b60408051808201909152600080825260208201528152602001906001900390816114735790505b50905060006114ac85602001516116de565b85602001516114bb919061368c565b90506000805b84811015611524576114d283611759565b91506040518060400160405280838152602001848152508482815181106114fb576114fb6134b1565b6020908102919091010152611510828461368c565b92508061151c816134dd565b9150506114c1565b509195945050505050565b80516000901580159061154457508151602110155b61154d57600080fd5b600080611559846117fd565b8151919350915060208210156113945760208290036101000a9004949350505050565b600054610100900460ff166115a35760405162461bcd60e51b81526004016103df90613641565b61059633611179565b606061121982611844565b60606112196115c583611894565b611844565b606060006115d7836119c8565b90506115ee6115e8825160c0611af9565b82611caf565b9392505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b805160009061163357506000919050565b6020820151805160001a9060c0821015611651575060009392505050565b5060019392505050565b805160009061166c57506000919050565b60008061167c84602001516116de565b846020015161168b919061368c565b90506000846000015185602001516116a3919061368c565b90505b808210156116d5576116b782611759565b6116c1908361368c565b9150826116cd816134dd565b9350506116a6565b50909392505050565b8051600090811a60808110156116f75750600092915050565b60b8811080611712575060c08110801590611712575060f881105b156117205750600192915050565b60c081101561174d57611735600160b86136bb565b6117429060ff16826136a4565b6115ee90600161368c565b611735600160f86136bb565b80516000908190811a608081101561177457600191506104c5565b60b881101561179a576117886080826136a4565b61179390600161368c565b91506104c5565b60c08110156117c75760b78103600185019450806020036101000a855104600182018101935050506104c5565b60f88110156117db5761178860c0826136a4565b60019390930151602084900360f7016101000a900490920160f5190192915050565b600080600061180f84602001516116de565b90506000818560200151611823919061368c565b9050600082866000015161183791906136a4565b9196919550909350505050565b606080825160011480156118735750608083600081518110611868576118686134b1565b016020015160f81c11155b1561187f575081611219565b6115ee61188e84516080611af9565b84611caf565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b6020811015611908578181815181106118dd576118dd6134b1565b01602001516001600160f81b031916156118f657611908565b80611900816134dd565b9150506118c2565b60006119158260206136a4565b6001600160401b0381111561192c5761192c611da4565b6040519080825280601f01601f191660200182016040528015611956576020820181803683370190505b50905060005b8151811015610d4a578383611970816134dd565b945081518110611982576119826134b1565b602001015160f81c60f81b82828151811061199f5761199f6134b1565b60200101906001600160f81b031916908160001a905350806119c0816134dd565b91505061195c565b60608151600014156119ea5760408051600080825260208201909252906104c5565b6000805b8351811015611a3157838181518110611a0957611a096134b1565b60200260200101515182611a1d919061368c565b915080611a29816134dd565b9150506119ee565b6000826001600160401b03811115611a4b57611a4b611da4565b6040519080825280601f01601f191660200182016040528015611a75576020820181803683370190505b50600092509050602081015b8551831015610d4a576000868481518110611a9e57611a9e6134b1565b602002602001015190506000602082019050611abc83828451611d2c565b878581518110611ace57611ace6134b1565b60200260200101515183611ae2919061368c565b925050508280611af1906134dd565b935050611a81565b6060806038841015611b635760408051600180825281830190925290602082018180368337019050509050611b2e838561368c565b601f1a60f81b81600081518110611b4757611b476134b1565b60200101906001600160f81b031916908160001a9053506115ee565b600060015b611b7281876136f4565b15611b985781611b81816134dd565b9250611b91905061010082613708565b9050611b68565b611ba382600161368c565b6001600160401b03811115611bba57611bba611da4565b6040519080825280601f01601f191660200182016040528015611be4576020820181803683370190505b509250611bf1858361368c565b611bfc90603761368c565b601f1a60f81b83600081518110611c1557611c156134b1565b60200101906001600160f81b031916908160001a905350600190505b818111611ca657610100611c4582846136a4565b611c519061010061380b565b611c5b90886136f4565b611c659190613817565b601f1a60f81b838281518110611c7d57611c7d6134b1565b60200101906001600160f81b031916908160001a90535080611c9e816134dd565b915050611c31565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015611ce0578051835260209283019201611cc8565b50855184518101855292509050808201602086015b81831015611d0d578051835260209283019201611cf5565b508651929092011591909101601f01601f191660405250905092915050565b8282825b60208110611d685781518352611d4760208461368c565b9250611d5460208361368c565b9150611d616020826136a4565b9050611d30565b60006001611d778360206136a4565b611d839061010061380b565b611d8d91906136a4565b925184518416931916929092179092525050505050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715611ddd57611ddd611da4565b60405290565b60405160a081016001600160401b0381118282101715611ddd57611ddd611da4565b604080519081016001600160401b0381118282101715611ddd57611ddd611da4565b604051608081016001600160401b0381118282101715611ddd57611ddd611da4565b60405161018081016001600160401b0381118282101715611ddd57611ddd611da4565b604051606081016001600160401b0381118282101715611ddd57611ddd611da4565b60405161016081016001600160401b0381118282101715611ddd57611ddd611da4565b604051601f8201601f191681016001600160401b0381118282101715611ed957611ed9611da4565b604052919050565b6001600160a01b03811681146106a657600080fd5b8035611f0181611ee1565b919050565b803563ffffffff81168114611f0157600080fd5b803560ff81168114611f0157600080fd5b803561ffff81168114611f0157600080fd5b60006101408284031215611f5057600080fd5b611f58611dba565b611f6183611ef6565b8152611f6f60208401611ef6565b6020820152611f8060408401611ef6565b6040820152611f9160608401611f06565b6060820152611fa260808401611f06565b6080820152611fb360a08401611ef6565b60a0820152611fc460c08401611f1a565b60c0820152611fd560e08401611f2b565b60e0820152610100611fe8818501611f1a565b90820152610120611ffa848201611f1a565b908201529392505050565b60006001600160401b0382111561201e5761201e611da4565b50601f01601f191660200190565b600082601f83011261203d57600080fd5b813561205061204b82612005565b611eb1565b81815284602083860101111561206557600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561209f57600080fd5b88356120aa81611ee1565b975060208901356120ba81611ee1565b965060408901356120ca81611ee1565b95506120d860608a01611f06565b945060808901356120e881611ee1565b93506120f660a08a01611f06565b925060c08901356001600160401b0381111561211157600080fd5b61211d8b828c0161202c565b92505061212c60e08a01611f2b565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156121805783518252928401926001929092019190840190612160565b509695505050505050565b60005b838110156121a657818101518382015260200161218e565b838111156121b5576000848401525b50505050565b600081518084526121d381602086016020860161218b565b601f01601f19169290920160200192915050565b6020815260006115ee60208301846121bb565b60008060008060008060c0878903121561221357600080fd5b863561221e81611ee1565b9550602087013561222e81611ee1565b945061223c60408801611f06565b9350606087013561224c81611ee1565b925061225a60808801611f06565b915061226860a08801611f2b565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156122b55783516001600160a01b031683529284019291840191600101612290565b50909695505050505050565b6000602082840312156122d357600080fd5b5035919050565b600080600080608085870312156122f057600080fd5b6122f985611f06565b935061230760208601611f2b565b925061231560408601611f1a565b915060608501356001600160401b0381111561233057600080fd5b61233c8782880161202c565b91505092959194509250565b60006001600160401b0382111561236157612361611da4565b5060051b60200190565b6000602080838503121561237e57600080fd5b82356001600160401b038082111561239557600080fd5b818501915085601f8301126123a957600080fd5b81356123b761204b82612348565b81815260059190911b830184019084810190888311156123d657600080fd5b8585015b8381101561240e578035858111156123f25760008081fd5b6124008b89838a010161202c565b8452509186019186016123da565b5098975050505050505050565b600080600080600060a0868803121561243357600080fd5b61243c86611f06565b945061244a60208701611f2b565b935061245860408701611f2b565b925061246660608701611f1a565b915060808601356001600160401b0381111561248157600080fd5b61248d8882890161202c565b9150509295509295909350565b600082601f8301126124ab57600080fd5b813560206124bb61204b83612348565b82815260059290921b840181019181810190868411156124da57600080fd5b8286015b848110156121805780356001600160401b03808211156124fd57600080fd5b9088019060a0828b03601f1901121561251557600080fd5b61251d611de3565b612528878401611f1a565b815260408084013561253981611ee1565b828901526060848101358284015260808501359083015260a0840135838111156125635760008081fd5b8085019450508b603f85011261257b57600092508283fd5b87840135925061258d61204b84612348565b83815260069390931b8401810192888101908d8511156125ad5760008081fd5b948201945b848610156126045782868f0312156125ca5760008081fd5b6125d2611e05565b6125db87611f06565b81528a8701358060040b81146125f15760008081fd5b818c0152825294820194908901906125b2565b60808401525050855250509183019183016124de565b60006080828403121561262c57600080fd5b612634611e27565b9050813561264181611ee1565b815261264f60208301611f1a565b602082015260408201356001600160401b038082111561266e57600080fd5b61267a8583860161202c565b6040840152606084013591508082111561269357600080fd5b506126a08482850161202c565b60608301525092915050565b600080604083850312156126bf57600080fd5b82356001600160401b03808211156126d657600080fd5b9084019060a082870312156126ea57600080fd5b6126f2611de3565b82356126fd81611ee1565b8152602083013561270d81611ee1565b6020820152604083013561272081611ee1565b604082015260608301358281111561273757600080fd5b8301610180818903121561274a57600080fd5b612752611e49565b61275b82611ef6565b815261276960208301611ef6565b602082015261277a60408301611ef6565b604082015261278b60608301611ef6565b60608201526080820135608082015260a082013560a08201526127b060c08301611f06565b60c08201526127c160e08301611f06565b60e08201526101006127d4818401611f06565b908201526101206127e6838201611f1a565b9082015261014082810135858111156127fe57600080fd5b61280a8b82860161249a565b828401525050610160808301358581111561282457600080fd5b6128308b82860161202c565b828401525050806060840152505061284a60808401611f1a565b60808201529350602085013591508082111561286557600080fd5b506128728582860161261a565b9150509250929050565b6020815260018060a01b03825116602082015260ff602083015116604082015260006040830151608060608401526128b760a08401826121bb565b90506060840151601f198483030160808501526128d482826121bb565b95945050505050565b600082601f8301126128ee57600080fd5b813560206128fe61204b83612348565b82815260059290921b8401810191818101908684111561291d57600080fd5b8286015b848110156121805780358352918301918301612921565b600082601f83011261294957600080fd5b8135602061295961204b83612348565b82815260059290921b8401810191818101908684111561297857600080fd5b8286015b8481101561218057803561298f81611ee1565b835291830191830161297c565b600082601f8301126129ad57600080fd5b813560206129bd61204b83612348565b82815260059290921b840181019181810190868411156129dc57600080fd5b8286015b848110156121805780356001600160401b03808211156129ff57600080fd5b90880190601f196080838c0382011215612a1857600080fd5b612a20611e27565b8784013583811115612a3157600080fd5b84016060818e0384011215612a4557600080fd5b612a4d611e6c565b9250612a5a898201611f1a565b8352604080820135612a6b81611ee1565b848b0152606082013585811115612a8157600080fd5b612a8f8f8c838601016128dd565b8286015250838352612aa2818701611f1a565b8a8401526060860135935084841115612aba57600080fd5b612ac88e8b86890101612938565b90830152506080840135915082821115612ae157600080fd5b612aef8c89848701016128dd565b606082015286525050509183019183016129e0565b600082601f830112612b1557600080fd5b81356020612b2561204b83612348565b82815260059290921b84018101918181019086841115612b4457600080fd5b8286015b848110156121805780356001600160401b03811115612b675760008081fd5b612b758986838b010161202c565b845250918301918301612b48565b600082601f830112612b9457600080fd5b81356020612ba461204b83612348565b82815260059290921b84018101918181019086841115612bc357600080fd5b8286015b848110156121805780356001600160401b0380821115612be75760008081fd5b9088019060a0828b03601f1901811315612c015760008081fd5b612c09611de3565b8784013583811115612c1b5760008081fd5b612c298d8a8388010161299c565b8252506040612c39818601611f1a565b898301526060612c4a818701611ef6565b82840152608091508186013585811115612c645760008081fd5b612c728f8c838a0101612938565b82850152505082850135925083831115612c8c5760008081fd5b612c9a8d8a85880101612b04565b908201528652505050918301918301612bc7565b600082601f830112612cbf57600080fd5b81356020612ccf61204b83612348565b82815260059290921b84018101918181019086841115612cee57600080fd5b8286015b8481101561218057612d0381611f1a565b8352918301918301612cf2565b80356001600160401b0381168114611f0157600080fd5b600082601f830112612d3857600080fd5b81356020612d4861204b83612348565b82815260059290921b84018101918181019086841115612d6757600080fd5b8286015b848110156121805780356001600160401b0380821115612d8b5760008081fd5b90880190610160828b03601f1901811315612da65760008081fd5b612dae611e8e565b612db9888501611f2b565b81526040612dc8818601611f2b565b898301526060612dd9818701611f1a565b8284015260809150612dec828701611f06565b9083015260a0612dfd868201611f1a565b8284015260c09150612e10828701611f06565b9083015260e0612e21868201611f06565b828401526101009150612e35828701612d10565b908301526101208581013585811115612e4e5760008081fd5b612e5c8f8c838a0101612938565b838501525061014091508186013585811115612e785760008081fd5b612e868f8c838a0101612b04565b828501525050612e97838601611ef6565b908201528652505050918301918301612d6b565b600082601f830112612ebc57600080fd5b81356020612ecc61204b83612348565b82815260059290921b84018101918181019086841115612eeb57600080fd5b8286015b848110156121805780356001600160401b0380821115612f0f5760008081fd5b9088019060a0828b03601f1901811315612f295760008081fd5b612f31611de3565b612f3c888501611f06565b815260408085013584811115612f525760008081fd5b612f608e8b8389010161202c565b8a8401525060608086013585811115612f795760008081fd5b612f878f8c838a010161202c565b8385015250608091508186013585811115612fa25760008081fd5b612fb08f8c838a010161202c565b828501525050612fc1838601611f1a565b908201528652505050918301918301612eef565b60008060408385031215612fe857600080fd5b612ff183611f06565b915060208301356001600160401b038082111561300d57600080fd5b90840190610160828703121561302257600080fd5b61302a611e8e565b82358281111561303957600080fd5b61304588828601612b83565b82525060208301358281111561305a57600080fd5b61306688828601612cae565b60208301525060408301358281111561307e57600080fd5b61308a88828601612d27565b6040830152506060830135828111156130a257600080fd5b6130ae88828601612eab565b6060830152506080830135828111156130c657600080fd5b6130d288828601612cae565b60808301525060a0830135828111156130ea57600080fd5b6130f688828601612938565b60a08301525060c08301358281111561310e57600080fd5b61311a88828601612938565b60c08301525061312c60e08401611f06565b60e082015261010061313f818501611f06565b90820152610120613151848201611f1a565b90820152610140838101358381111561316957600080fd5b6131758982870161202c565b8284015250508093505050509250929050565b60006020828403121561319a57600080fd5b81356001600160401b03808211156131b157600080fd5b9083019061016082860312156131c657600080fd5b6131ce611e8e565b6131d783611ef6565b81526131e560208401611ef6565b60208201526131f660408401611f06565b604082015261320760608401611f2b565b606082015261321860808401611f2b565b608082015261322960a08401611f1a565b60a082015261323a60c08401611ef6565b60c082015261324b60e08401611f06565b60e082015261010061325e818501611ef6565b90820152610120613270848201611f1a565b90820152610140838101358381111561328857600080fd5b6132948882870161202c565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156132fa57603f198886030184526132e88583516121bb565b945092850192908501906001016132cc565b5092979650505050505050565b60006020828403121561331957600080fd5b81356001600160401b0381111561332f57600080fd5b61139484828501612938565b60008060006060848603121561335057600080fd5b61335984611f06565b925061336760208501611f2b565b915061337560408501611f1a565b90509250925092565b60006020828403121561339057600080fd5b81356115ee81611ee1565b600081518084526020808501945080840160005b838110156133ce57815160ff16875295820195908201906001016133af565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561345057888303603f19018552815180518785526134248886018261339b565b91890151858303868b015291905061343c818361339b565b968901969450505090860190600101613400565b509098975050505050505050565b6000825161347081846020870161218b565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134f1576134f16134c7565b5060010190565b60006020828403121561350a57600080fd5b81516115ee81611ee1565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03958616815263ffffffff94909416602085015261ffff928316604085015291166060830152909116608082015260a00190565b60006020828403121561359557600080fd5b81516001600160401b038111156135ab57600080fd5b8201601f810184136135bc57600080fd5b80516135ca61204b82612005565b8181528560208385010111156135df57600080fd5b6128d482602083016020860161218b565b61ffff94851681529290931660208301526001600160a01b0316604082015260ff909116606082015260800190565b600061ffff80831681811415613637576136376134c7565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111561369f5761369f6134c7565b500190565b6000828210156136b6576136b66134c7565b500390565b600060ff821660ff8416808210156136d5576136d56134c7565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b600082613703576137036136de565b500490565b6000816000190483118215151615613722576137226134c7565b500290565b600181815b80851115613762578160001904821115613748576137486134c7565b8085161561375557918102915b93841c939080029061372c565b509250929050565b60008261377957506001611219565b8161378657506000611219565b816001811461379c57600281146137a6576137c2565b6001915050611219565b60ff8411156137b7576137b76134c7565b50506001821b611219565b5060208310610133831016604e8410600b84101617156137e5575081810a611219565b6137ef8383613727565b8060001904821115613803576138036134c7565b029392505050565b60006115ee838361376a565b600082613826576138266136de565b50069056fea2646970667358221220e938000f07e257125df2b27c1aef5e12acc4f455115aa5c20d07cdc6332610ba64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101225760003560e01c80638129fc1c116100a85780638129fc1c1461027d5780638da5cb5b1461028557806395edcb08146102a0578063a903620c146102c0578063af84b51f146102d3578063b41bd789146102f3578063b4b7035214610306578063d0d35b5514610319578063f2fde38b1461032c578063f2fe4fa51461033f578063f96f58271461034e57600080fd5b80631cc4f041146101275780631eda6e4f1461015057806334c76b25146101925780634b2dbcb8146101c05780634b2e9b41146101c05780634b7b47d2146101f457806354fd4d50146102295780635790c2941461023a57806362329cc51461024f5780636dabaf0414610262578063715018a614610275575b600080fd5b61013b610135366004611f3d565b50600190565b60405190151581526020015b60405180910390f35b61018561015e366004612082565b50506040805160208082018352606091829052825190810190925281529695505050505050565b604051610147919061213b565b60408051808201909152600981526815da1a5d19531a5cdd60ba1b60208201525b60405161014791906121e7565b6101e76101ce3660046121fa565b5050604080516000815260208101909152949350505050565b6040516101479190612274565b6102176102023660046122c1565b60686020526000908152604090205460ff1681565b60405160ff9091168152602001610147565b60015b604051908152602001610147565b61024d6102483660046122da565b61036e565b005b6101e761025d36600461236b565b6103ef565b61013b61027036600461241b565b6104cc565b61024d610584565b61024d610598565b6033546040516001600160a01b039091168152602001610147565b6102b36102ae3660046126ac565b6106a9565b604051610147919061287c565b61024d6102ce366004612fd5565b6109ec565b6102e66102e1366004613188565b610a69565b60405161014791906132a5565b61024d610301366004613307565b610bb5565b61013b610314366004611f3d565b610cc3565b6101b361032736600461333b565b610d36565b61024d61033a36600461337e565b610d53565b606060405161014791906133d9565b61022c61035c3660046122c1565b60696020526000908152604090205481565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506066816040516103a6919061345e565b90815260405190819003602001902054336001600160a01b03909116146103e85760405162461bcd60e51b81526004016103df9061347a565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561040c5761040c611da4565b604051908082528060200260200182016040528015610435578160200160208202803683370190505b50905060005b81518110156104c5576066848281518110610458576104586134b1565b602002602001015160405161046d919061345e565b9081526040519081900360200190205482516001600160a01b039091169083908390811061049d5761049d6134b1565b6001600160a01b03909216602092830291909101909101526104be816134dd565b905061043b565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060668160405161050d919061345e565b90815260405190819003602001902054336001600160a01b03909116146105465760405162461bcd60e51b81526004016103df9061347a565b60ff841661055f5761055a87878786610dc9565b610577565b60ff8416600114156105775761057787878786610f45565b5060019695505050505050565b61058c61111f565b6105966000611179565b565b600054610100900460ff16158080156105b85750600054600160ff909116105b806105d25750303b1580156105d2575060005460ff166001145b6106355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103df565b6000805460ff191660011790558015610658576000805461ff0019166101001790555b6106606111cb565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506066816040516106fb919061345e565b90815260405190819003602001902054336001600160a01b03909116146107345760405162461bcd60e51b81526004016103df9061347a565b60008460600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561077757600080fd5b505afa15801561078b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107af91906134f8565b9050600081866060015161010001516107cb88606001516111fa565b6107d8896060015161121f565b6040516020016107eb9493929190613515565b60408051601f19818403018152918152815160209283012060008181526069909352908220549092509061082182600883611244565b905060ff811661083457505050506104c5565b6000848960600151610100015161084e8b606001516111fa565b61085b8c6060015161121f565b8c51604051610871959493929190602001613548565b60408051601f1981840301815291815281516020928301206000818152606890935291205490915060ff1660018114156108e657505060408051808201825260118152701dda1a5d19481b1a5cdd081c185cdcd959607a1b60208083019190915291880152600090870152506104c592505050565b60608a81015161010001518b51604080516001600160a01b03808c16602083015263ffffffff90941691810191909152600093810184905260808101939093521660a082015260c00160408051601f1981840301815291815281516020928301206000818152606890935291205490925060ff16905060018114156109a657505060408051808201825260118152701dda1a5d19481b1a5cdd081c185cdcd959607a1b60208083019190915291880152600090870152506104c592505050565b505060408051808201825260158152741dda1a5d19481b1a5cdd081b9bdd081c185cdcd959605a1b60208083019190915291880152600190870152505050505092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606681604051610a2b919061345e565b90815260405190819003602001902054336001600160a01b0390911614610a645760405162461bcd60e51b81526004016103df9061347a565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610aaa57600080fd5b505afa158015610abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae291906134f8565b9050600081846040015185606001518660800151876101000151604051602001610b10959493929190613548565b60408051808303601f1901815282825280516020909101206001808452838301909252925060009190816020015b6060815260200190600190039081610b3e5750506040805180820182526005815264195e1a5cdd60da1b602080830191909152600086815260689091529190912054919250610b8f9160ff16611263565b81600081518110610ba257610ba26134b1565b6020908102919091010152949350505050565b610bbd61111f565b60005b8151811015610cbf57818181518110610bdb57610bdb6134b1565b60200260200101516066838381518110610bf757610bf76134b1565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b158015610c3757600080fd5b505afa158015610c4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c739190810190613583565b604051610c80919061345e565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610cb8816134dd565b9050610bc0565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b815250606681604051610cf4919061345e565b90815260405190819003602001902054336001600160a01b0390911614610d2d5760405162461bcd60e51b81526004016103df9061347a565b50600092915050565b604080516000808252602082019092526060915b50949350505050565b610d5b61111f565b6001600160a01b038116610dc05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103df565b6106a681611179565b6000610dd6826000611344565b9050600033868686604051602001610df19493929190613515565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020549050610e32818460ff166008600061139c565b6000838152606960205260408120829055909150610e518560016113c1565b905060005b81518161ffff161015610f3a576000828261ffff1681518110610e7b57610e7b6134b1565b602002602001015190506000338b8b8b610e9486611400565b604051602001610ea8959493929190613548565b60408051601f198184030181529181528151602092830120600081815260689093529120805460ff19166001179055905063ffffffff8b16337f5c672befb1e372cf682230a693300a297b1e24971b8d2a44a5cb2a13edce4a168c8c610f0d87611400565b6001604051610f1f94939291906135f0565b60405180910390a3505080610f339061361f565b9050610e56565b505050505050505050565b6000610f52826000611344565b9050600033868686604051602001610f6d9493929190613515565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020549050610fae818460ff166008600061139c565b6000838152606960205260408120829055909150610fcd8560016113c1565b905060005b81518161ffff161015610f3a576000828261ffff1681518110610ff757610ff76134b1565b60200260200101519050600061100c8261141a565b9050600061103382600081518110611026576110266134b1565b6020026020010151611400565b9050600061105a8360018151811061104d5761104d6134b1565b602002602001015161152f565b90506000338e8e8e86604051602001611077959493929190613548565b604051602081830303815290604052805190602001209050816068600083815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508d63ffffffff16336001600160a01b03167f5c672befb1e372cf682230a693300a297b1e24971b8d2a44a5cb2a13edce4a168f8f878760405161110194939291906135f0565b60405180910390a35050505050806111189061361f565b9050610fd2565b6033546001600160a01b031633146105965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103df565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166111f25760405162461bcd60e51b81526004016103df90613641565b61059661157c565b60006112198260a00151601060006008611214919061368c565b611244565b92915050565b60006112198260a00151601060006008611239919061368c565b61121490601061368c565b91821c91600080611258600180861b6136a4565b909416949350505050565b60606000611270846115ac565b9050600061127d846115b7565b6040805160038082526080820190925291925060009190816020015b606081526020019060019003908161129957905050905082816000815181106112c4576112c46134b1565b60200260200101819052506112f4604051806040016040528060048152602001631d5a5b9d60e21b8152506115ac565b81600181518110611307576113076134b1565b60200260200101819052508181600281518110611326576113266134b1565b602002602001018190525061133a816115ca565b9695505050505050565b600080611358611353856115f5565b61141a565b9050611394611382828560ff1681518110611375576113756134b1565b602002602001015161141a565b60028151811061104d5761104d6134b1565b949350505050565b600083821b81836113b0600180881b6136a4565b901b19969096161795945050505050565b606060006113d1611353856115f5565b90506113946113ee828560ff1681518110611375576113756134b1565b600281518110611375576113756134b1565b805160009060151461141157600080fd5b6112198261152f565b606061142582611622565b61142e57600080fd5b60006114398361165b565b90506000816001600160401b0381111561145557611455611da4565b60405190808252806020026020018201604052801561149a57816020015b60408051808201909152600080825260208201528152602001906001900390816114735790505b50905060006114ac85602001516116de565b85602001516114bb919061368c565b90506000805b84811015611524576114d283611759565b91506040518060400160405280838152602001848152508482815181106114fb576114fb6134b1565b6020908102919091010152611510828461368c565b92508061151c816134dd565b9150506114c1565b509195945050505050565b80516000901580159061154457508151602110155b61154d57600080fd5b600080611559846117fd565b8151919350915060208210156113945760208290036101000a9004949350505050565b600054610100900460ff166115a35760405162461bcd60e51b81526004016103df90613641565b61059633611179565b606061121982611844565b60606112196115c583611894565b611844565b606060006115d7836119c8565b90506115ee6115e8825160c0611af9565b82611caf565b9392505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b805160009061163357506000919050565b6020820151805160001a9060c0821015611651575060009392505050565b5060019392505050565b805160009061166c57506000919050565b60008061167c84602001516116de565b846020015161168b919061368c565b90506000846000015185602001516116a3919061368c565b90505b808210156116d5576116b782611759565b6116c1908361368c565b9150826116cd816134dd565b9350506116a6565b50909392505050565b8051600090811a60808110156116f75750600092915050565b60b8811080611712575060c08110801590611712575060f881105b156117205750600192915050565b60c081101561174d57611735600160b86136bb565b6117429060ff16826136a4565b6115ee90600161368c565b611735600160f86136bb565b80516000908190811a608081101561177457600191506104c5565b60b881101561179a576117886080826136a4565b61179390600161368c565b91506104c5565b60c08110156117c75760b78103600185019450806020036101000a855104600182018101935050506104c5565b60f88110156117db5761178860c0826136a4565b60019390930151602084900360f7016101000a900490920160f5190192915050565b600080600061180f84602001516116de565b90506000818560200151611823919061368c565b9050600082866000015161183791906136a4565b9196919550909350505050565b606080825160011480156118735750608083600081518110611868576118686134b1565b016020015160f81c11155b1561187f575081611219565b6115ee61188e84516080611af9565b84611caf565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b6020811015611908578181815181106118dd576118dd6134b1565b01602001516001600160f81b031916156118f657611908565b80611900816134dd565b9150506118c2565b60006119158260206136a4565b6001600160401b0381111561192c5761192c611da4565b6040519080825280601f01601f191660200182016040528015611956576020820181803683370190505b50905060005b8151811015610d4a578383611970816134dd565b945081518110611982576119826134b1565b602001015160f81c60f81b82828151811061199f5761199f6134b1565b60200101906001600160f81b031916908160001a905350806119c0816134dd565b91505061195c565b60608151600014156119ea5760408051600080825260208201909252906104c5565b6000805b8351811015611a3157838181518110611a0957611a096134b1565b60200260200101515182611a1d919061368c565b915080611a29816134dd565b9150506119ee565b6000826001600160401b03811115611a4b57611a4b611da4565b6040519080825280601f01601f191660200182016040528015611a75576020820181803683370190505b50600092509050602081015b8551831015610d4a576000868481518110611a9e57611a9e6134b1565b602002602001015190506000602082019050611abc83828451611d2c565b878581518110611ace57611ace6134b1565b60200260200101515183611ae2919061368c565b925050508280611af1906134dd565b935050611a81565b6060806038841015611b635760408051600180825281830190925290602082018180368337019050509050611b2e838561368c565b601f1a60f81b81600081518110611b4757611b476134b1565b60200101906001600160f81b031916908160001a9053506115ee565b600060015b611b7281876136f4565b15611b985781611b81816134dd565b9250611b91905061010082613708565b9050611b68565b611ba382600161368c565b6001600160401b03811115611bba57611bba611da4565b6040519080825280601f01601f191660200182016040528015611be4576020820181803683370190505b509250611bf1858361368c565b611bfc90603761368c565b601f1a60f81b83600081518110611c1557611c156134b1565b60200101906001600160f81b031916908160001a905350600190505b818111611ca657610100611c4582846136a4565b611c519061010061380b565b611c5b90886136f4565b611c659190613817565b601f1a60f81b838281518110611c7d57611c7d6134b1565b60200101906001600160f81b031916908160001a90535080611c9e816134dd565b915050611c31565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015611ce0578051835260209283019201611cc8565b50855184518101855292509050808201602086015b81831015611d0d578051835260209283019201611cf5565b508651929092011591909101601f01601f191660405250905092915050565b8282825b60208110611d685781518352611d4760208461368c565b9250611d5460208361368c565b9150611d616020826136a4565b9050611d30565b60006001611d778360206136a4565b611d839061010061380b565b611d8d91906136a4565b925184518416931916929092179092525050505050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715611ddd57611ddd611da4565b60405290565b60405160a081016001600160401b0381118282101715611ddd57611ddd611da4565b604080519081016001600160401b0381118282101715611ddd57611ddd611da4565b604051608081016001600160401b0381118282101715611ddd57611ddd611da4565b60405161018081016001600160401b0381118282101715611ddd57611ddd611da4565b604051606081016001600160401b0381118282101715611ddd57611ddd611da4565b60405161016081016001600160401b0381118282101715611ddd57611ddd611da4565b604051601f8201601f191681016001600160401b0381118282101715611ed957611ed9611da4565b604052919050565b6001600160a01b03811681146106a657600080fd5b8035611f0181611ee1565b919050565b803563ffffffff81168114611f0157600080fd5b803560ff81168114611f0157600080fd5b803561ffff81168114611f0157600080fd5b60006101408284031215611f5057600080fd5b611f58611dba565b611f6183611ef6565b8152611f6f60208401611ef6565b6020820152611f8060408401611ef6565b6040820152611f9160608401611f06565b6060820152611fa260808401611f06565b6080820152611fb360a08401611ef6565b60a0820152611fc460c08401611f1a565b60c0820152611fd560e08401611f2b565b60e0820152610100611fe8818501611f1a565b90820152610120611ffa848201611f1a565b908201529392505050565b60006001600160401b0382111561201e5761201e611da4565b50601f01601f191660200190565b600082601f83011261203d57600080fd5b813561205061204b82612005565b611eb1565b81815284602083860101111561206557600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561209f57600080fd5b88356120aa81611ee1565b975060208901356120ba81611ee1565b965060408901356120ca81611ee1565b95506120d860608a01611f06565b945060808901356120e881611ee1565b93506120f660a08a01611f06565b925060c08901356001600160401b0381111561211157600080fd5b61211d8b828c0161202c565b92505061212c60e08a01611f2b565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156121805783518252928401926001929092019190840190612160565b509695505050505050565b60005b838110156121a657818101518382015260200161218e565b838111156121b5576000848401525b50505050565b600081518084526121d381602086016020860161218b565b601f01601f19169290920160200192915050565b6020815260006115ee60208301846121bb565b60008060008060008060c0878903121561221357600080fd5b863561221e81611ee1565b9550602087013561222e81611ee1565b945061223c60408801611f06565b9350606087013561224c81611ee1565b925061225a60808801611f06565b915061226860a08801611f2b565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156122b55783516001600160a01b031683529284019291840191600101612290565b50909695505050505050565b6000602082840312156122d357600080fd5b5035919050565b600080600080608085870312156122f057600080fd5b6122f985611f06565b935061230760208601611f2b565b925061231560408601611f1a565b915060608501356001600160401b0381111561233057600080fd5b61233c8782880161202c565b91505092959194509250565b60006001600160401b0382111561236157612361611da4565b5060051b60200190565b6000602080838503121561237e57600080fd5b82356001600160401b038082111561239557600080fd5b818501915085601f8301126123a957600080fd5b81356123b761204b82612348565b81815260059190911b830184019084810190888311156123d657600080fd5b8585015b8381101561240e578035858111156123f25760008081fd5b6124008b89838a010161202c565b8452509186019186016123da565b5098975050505050505050565b600080600080600060a0868803121561243357600080fd5b61243c86611f06565b945061244a60208701611f2b565b935061245860408701611f2b565b925061246660608701611f1a565b915060808601356001600160401b0381111561248157600080fd5b61248d8882890161202c565b9150509295509295909350565b600082601f8301126124ab57600080fd5b813560206124bb61204b83612348565b82815260059290921b840181019181810190868411156124da57600080fd5b8286015b848110156121805780356001600160401b03808211156124fd57600080fd5b9088019060a0828b03601f1901121561251557600080fd5b61251d611de3565b612528878401611f1a565b815260408084013561253981611ee1565b828901526060848101358284015260808501359083015260a0840135838111156125635760008081fd5b8085019450508b603f85011261257b57600092508283fd5b87840135925061258d61204b84612348565b83815260069390931b8401810192888101908d8511156125ad5760008081fd5b948201945b848610156126045782868f0312156125ca5760008081fd5b6125d2611e05565b6125db87611f06565b81528a8701358060040b81146125f15760008081fd5b818c0152825294820194908901906125b2565b60808401525050855250509183019183016124de565b60006080828403121561262c57600080fd5b612634611e27565b9050813561264181611ee1565b815261264f60208301611f1a565b602082015260408201356001600160401b038082111561266e57600080fd5b61267a8583860161202c565b6040840152606084013591508082111561269357600080fd5b506126a08482850161202c565b60608301525092915050565b600080604083850312156126bf57600080fd5b82356001600160401b03808211156126d657600080fd5b9084019060a082870312156126ea57600080fd5b6126f2611de3565b82356126fd81611ee1565b8152602083013561270d81611ee1565b6020820152604083013561272081611ee1565b604082015260608301358281111561273757600080fd5b8301610180818903121561274a57600080fd5b612752611e49565b61275b82611ef6565b815261276960208301611ef6565b602082015261277a60408301611ef6565b604082015261278b60608301611ef6565b60608201526080820135608082015260a082013560a08201526127b060c08301611f06565b60c08201526127c160e08301611f06565b60e08201526101006127d4818401611f06565b908201526101206127e6838201611f1a565b9082015261014082810135858111156127fe57600080fd5b61280a8b82860161249a565b828401525050610160808301358581111561282457600080fd5b6128308b82860161202c565b828401525050806060840152505061284a60808401611f1a565b60808201529350602085013591508082111561286557600080fd5b506128728582860161261a565b9150509250929050565b6020815260018060a01b03825116602082015260ff602083015116604082015260006040830151608060608401526128b760a08401826121bb565b90506060840151601f198483030160808501526128d482826121bb565b95945050505050565b600082601f8301126128ee57600080fd5b813560206128fe61204b83612348565b82815260059290921b8401810191818101908684111561291d57600080fd5b8286015b848110156121805780358352918301918301612921565b600082601f83011261294957600080fd5b8135602061295961204b83612348565b82815260059290921b8401810191818101908684111561297857600080fd5b8286015b8481101561218057803561298f81611ee1565b835291830191830161297c565b600082601f8301126129ad57600080fd5b813560206129bd61204b83612348565b82815260059290921b840181019181810190868411156129dc57600080fd5b8286015b848110156121805780356001600160401b03808211156129ff57600080fd5b90880190601f196080838c0382011215612a1857600080fd5b612a20611e27565b8784013583811115612a3157600080fd5b84016060818e0384011215612a4557600080fd5b612a4d611e6c565b9250612a5a898201611f1a565b8352604080820135612a6b81611ee1565b848b0152606082013585811115612a8157600080fd5b612a8f8f8c838601016128dd565b8286015250838352612aa2818701611f1a565b8a8401526060860135935084841115612aba57600080fd5b612ac88e8b86890101612938565b90830152506080840135915082821115612ae157600080fd5b612aef8c89848701016128dd565b606082015286525050509183019183016129e0565b600082601f830112612b1557600080fd5b81356020612b2561204b83612348565b82815260059290921b84018101918181019086841115612b4457600080fd5b8286015b848110156121805780356001600160401b03811115612b675760008081fd5b612b758986838b010161202c565b845250918301918301612b48565b600082601f830112612b9457600080fd5b81356020612ba461204b83612348565b82815260059290921b84018101918181019086841115612bc357600080fd5b8286015b848110156121805780356001600160401b0380821115612be75760008081fd5b9088019060a0828b03601f1901811315612c015760008081fd5b612c09611de3565b8784013583811115612c1b5760008081fd5b612c298d8a8388010161299c565b8252506040612c39818601611f1a565b898301526060612c4a818701611ef6565b82840152608091508186013585811115612c645760008081fd5b612c728f8c838a0101612938565b82850152505082850135925083831115612c8c5760008081fd5b612c9a8d8a85880101612b04565b908201528652505050918301918301612bc7565b600082601f830112612cbf57600080fd5b81356020612ccf61204b83612348565b82815260059290921b84018101918181019086841115612cee57600080fd5b8286015b8481101561218057612d0381611f1a565b8352918301918301612cf2565b80356001600160401b0381168114611f0157600080fd5b600082601f830112612d3857600080fd5b81356020612d4861204b83612348565b82815260059290921b84018101918181019086841115612d6757600080fd5b8286015b848110156121805780356001600160401b0380821115612d8b5760008081fd5b90880190610160828b03601f1901811315612da65760008081fd5b612dae611e8e565b612db9888501611f2b565b81526040612dc8818601611f2b565b898301526060612dd9818701611f1a565b8284015260809150612dec828701611f06565b9083015260a0612dfd868201611f1a565b8284015260c09150612e10828701611f06565b9083015260e0612e21868201611f06565b828401526101009150612e35828701612d10565b908301526101208581013585811115612e4e5760008081fd5b612e5c8f8c838a0101612938565b838501525061014091508186013585811115612e785760008081fd5b612e868f8c838a0101612b04565b828501525050612e97838601611ef6565b908201528652505050918301918301612d6b565b600082601f830112612ebc57600080fd5b81356020612ecc61204b83612348565b82815260059290921b84018101918181019086841115612eeb57600080fd5b8286015b848110156121805780356001600160401b0380821115612f0f5760008081fd5b9088019060a0828b03601f1901811315612f295760008081fd5b612f31611de3565b612f3c888501611f06565b815260408085013584811115612f525760008081fd5b612f608e8b8389010161202c565b8a8401525060608086013585811115612f795760008081fd5b612f878f8c838a010161202c565b8385015250608091508186013585811115612fa25760008081fd5b612fb08f8c838a010161202c565b828501525050612fc1838601611f1a565b908201528652505050918301918301612eef565b60008060408385031215612fe857600080fd5b612ff183611f06565b915060208301356001600160401b038082111561300d57600080fd5b90840190610160828703121561302257600080fd5b61302a611e8e565b82358281111561303957600080fd5b61304588828601612b83565b82525060208301358281111561305a57600080fd5b61306688828601612cae565b60208301525060408301358281111561307e57600080fd5b61308a88828601612d27565b6040830152506060830135828111156130a257600080fd5b6130ae88828601612eab565b6060830152506080830135828111156130c657600080fd5b6130d288828601612cae565b60808301525060a0830135828111156130ea57600080fd5b6130f688828601612938565b60a08301525060c08301358281111561310e57600080fd5b61311a88828601612938565b60c08301525061312c60e08401611f06565b60e082015261010061313f818501611f06565b90820152610120613151848201611f1a565b90820152610140838101358381111561316957600080fd5b6131758982870161202c565b8284015250508093505050509250929050565b60006020828403121561319a57600080fd5b81356001600160401b03808211156131b157600080fd5b9083019061016082860312156131c657600080fd5b6131ce611e8e565b6131d783611ef6565b81526131e560208401611ef6565b60208201526131f660408401611f06565b604082015261320760608401611f2b565b606082015261321860808401611f2b565b608082015261322960a08401611f1a565b60a082015261323a60c08401611ef6565b60c082015261324b60e08401611f06565b60e082015261010061325e818501611ef6565b90820152610120613270848201611f1a565b90820152610140838101358381111561328857600080fd5b6132948882870161202c565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156132fa57603f198886030184526132e88583516121bb565b945092850192908501906001016132cc565b5092979650505050505050565b60006020828403121561331957600080fd5b81356001600160401b0381111561332f57600080fd5b61139484828501612938565b60008060006060848603121561335057600080fd5b61335984611f06565b925061336760208501611f2b565b915061337560408501611f1a565b90509250925092565b60006020828403121561339057600080fd5b81356115ee81611ee1565b600081518084526020808501945080840160005b838110156133ce57815160ff16875295820195908201906001016133af565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561345057888303603f19018552815180518785526134248886018261339b565b91890151858303868b015291905061343c818361339b565b968901969450505090860190600101613400565b509098975050505050505050565b6000825161347081846020870161218b565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134f1576134f16134c7565b5060010190565b60006020828403121561350a57600080fd5b81516115ee81611ee1565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03958616815263ffffffff94909416602085015261ffff928316604085015291166060830152909116608082015260a00190565b60006020828403121561359557600080fd5b81516001600160401b038111156135ab57600080fd5b8201601f810184136135bc57600080fd5b80516135ca61204b82612005565b8181528560208385010111156135df57600080fd5b6128d482602083016020860161218b565b61ffff94851681529290931660208301526001600160a01b0316604082015260ff909116606082015260800190565b600061ffff80831681811415613637576136376134c7565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111561369f5761369f6134c7565b500190565b6000828210156136b6576136b66134c7565b500390565b600060ff821660ff8416808210156136d5576136d56134c7565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b600082613703576137036136de565b500490565b6000816000190483118215151615613722576137226134c7565b500290565b600181815b80851115613762578160001904821115613748576137486134c7565b8085161561375557918102915b93841c939080029061372c565b509250929050565b60008261377957506001611219565b8161378657506000611219565b816001811461379c57600281146137a6576137c2565b6001915050611219565b60ff8411156137b7576137b76134c7565b50506001821b611219565b5060208310610133831016604e8410600b84101617156137e5575081810a611219565b6137ef8383613727565b8060001904821115613803576138036134c7565b029392505050565b60006115ee838361376a565b600082613826576138266136de565b50069056fea2646970667358221220e938000f07e257125df2b27c1aef5e12acc4f455115aa5c20d07cdc6332610ba64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
