{
  "_format": "hh-sol-artifact-1",
  "contractName": "AllocateLayerHandler",
  "sourceName": "contracts/V3/handler/AllocateLayerHandler.sol",
  "abi": [
    {
      "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": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "clusterInputTokenIdSetState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "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": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "getClusterInputTokenIdSetState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "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": "",
          "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": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "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": "0x608060405234801561001057600080fd5b50615f2680620000216000396000f3fe608060405234801561001057600080fd5b50600436106101385760003560e01c80638129fc1c116100b35780638129fc1c146102855780638da5cb5b1461028d57806395edcb08146102a8578063a903620c146102c8578063af84b51f146102db578063b41bd789146102fb578063b4b703521461030e578063cac255c214610321578063d0d35b5514610344578063f2fde38b14610357578063f2fe4fa51461036a578063f96f58271461037f57600080fd5b80631cc4f0411461013d5780631eda6e4f1461016557806334c76b2514610185578063394a7398146101b75780634b2dbcb8146101ca5780634b2e9b41146101ca57806354fd4d50146101fe5780635790c2941461020d57806362329cc5146102225780636a356578146102355780636dabaf041461026a578063715018a61461027d575b600080fd5b61015061014b366004613a8b565b6103c0565b60405190151581526020015b60405180910390f35b610178610173366004613bd0565b6104a0565b60405161015c9190613c89565b60408051808201909152600d81526c20b63637b1b0ba32a630bcb2b960991b60208201525b60405161015c9190613d35565b6101aa6101c5366004613d48565b610536565b6101f16101d8366004613d61565b5050604080516000815260208101909152949350505050565b60405161015c9190613de8565b6040516001815260200161015c565b61022061021b366004613e29565b6105d0565b005b6101f1610230366004613ebc565b6106a5565b610258610243366004613d48565b60696020526000908152604090205460ff1681565b60405160ff909116815260200161015c565b610150610278366004613f6c565b610782565b61022061096e565b610220610982565b6033546040516001600160a01b03909116815260200161015c565b6102bb6102b6366004614203565b610a93565b60405161015c91906143d3565b6102206102d6366004614b30565b610e85565b6102ee6102e9366004614ce3565b610f02565b60405161015c9190614e00565b610220610309366004614e62565b611058565b61015061031c366004613a8b565b611166565b61025861032f366004613d48565b60009081526069602052604090205460ff1690565b6101aa610352366004614e96565b611342565b610220610365366004614edd565b611420565b610372611496565b60405161015c9190614f38565b6103a861038d366004613d48565b6068602052600090815260409020546001600160801b031681565b6040516001600160801b03909116815260200161015c565b6000806103ee836000015184602001518560600151866040015187608001518860a001518960e001516114dd565b6000818152606b602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561044d57602002820191906000526020600020905b815481526020019060010190808311610439575b505050505081525050905060008060ff168560c0015160ff1614156104845761012085015161047d90839061154c565b9050610498565b6101208501516104959083906115e1565b90505b949350505050565b60408051602081019091526060815260006104c08a898989898e896114dd565b6000818152606b6020908152604091829020825181548084028201850185529281018381529495509390928492849184018282801561051e57602002820191906000526020600020905b81548152602001906001019080831161050a575b50505050508152505091505098975050505050505050565b606a602052600090815260409020805461054f90614fbd565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90614fbd565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b505050505081565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506067816040516106089190614ff2565b90815260405190819003602001902054336001600160a01b039091161461064a5760405162461bcd60e51b81526004016106419061500e565b60405180910390fd5b6000338686866040516020016106639493929190615045565b60408051601f1981840301815291815281516020928301206000818152606a845291909120855191935061069c9290919086019061374d565b50505050505050565b6060600082516001600160401b038111156106c2576106c26138e9565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b815181101561077b57606784828151811061070e5761070e615078565b60200260200101516040516107239190614ff2565b9081526040519081900360200190205482516001600160a01b039091169083908390811061075357610753615078565b6001600160a01b0390921660209283029190910190910152610774816150a4565b90506106f1565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506067816040516107c39190614ff2565b90815260405190819003602001902054336001600160a01b03909116146107fc5760405162461bcd60e51b81526004016106419061500e565b60ff8416158061080f575060ff84166001145b156109615760003388888860405160200161082d94939291906150bf565b60405160208183030381529060405280519060200120905073__$9adf670328df3ee79279acdb5eff580adf$__6346fb8fe660676040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516108969190614ff2565b908152604051908190036020018120546001600160e01b031960e084901b1682526108d7916001600160a01b03909116908c908c908c908b906004016150f2565b60206040518083038186803b1580156108ef57600080fd5b505af4158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061513f565b600082815260686020526040902080546001600160801b0319166001600160801b039290921691909117905561095f88888887611658565b505b5060019695505050505050565b61097661175d565b61098060006117b7565b565b600054610100900460ff16158080156109a25750600054600160ff909116105b806109bc5750303b1580156109bc575060005460ff166001145b610a1f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610641565b6000805460ff191660011790558015610a42576000805461ff0019166101001790555b610a4a611809565b8015610a90576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610a9b6137d1565b60405180604001604052806006815260200165456e67696e6560d01b815250606781604051610aca9190614ff2565b90815260405190819003602001902054336001600160a01b0390911614610b035760405162461bcd60e51b81526004016106419061500e565b610b0b611838565b308352608084015160ff16610b2b57610b24848461184e565b9250610e7d565b608084015160ff1660011415610e7d576000610b4a85606001516118c4565b9050805160001480610b5d575080516001145b15610cc257604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606791610b9591614ff2565b90815260405160209181900382019020546060870151918201516101008301516001600160a01b039092169263063738cb9290610bd1906118d0565b610bde8a606001516118ef565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610c159796959493929190600401615168565b602060405180830381600087803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906151c4565b15610c7857600a6020850152610cb9565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b8392505061077b565b6060850151600090610cde90610cd9908484611914565b61196e565b905060ff8116600a1415610e4d57604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606791610d1f91614ff2565b90815260405160209181900382019020546060880151918201516101008301516001600160a01b039092169263063738cb9290610d5b906118d0565b610d688b606001516118ef565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610d9f9796959493929190600401615168565b602060405180830381600087803b158015610db957600080fd5b505af1158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df191906151c4565b15610e0257600a6020860152610e43565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b849350505061077b565b60ff81161580610e60575060ff81166064145b15610e7a57610e708686836119bb565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606781604051610ec49190614ff2565b90815260405190819003602001902054336001600160a01b0390911614610efd5760405162461bcd60e51b81526004016106419061500e565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4357600080fd5b505afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b91906151ea565b604080850151606086015160808701519251610f9b9493906020016150bf565b60408051601f198184030181528282528051602091820120600081815260689092529190205463032bd0cd60e41b83529092506001600160801b03169073__$9adf670328df3ee79279acdb5eff580adf$__906332bd0cd0906110049087908590600401615207565b60006040518083038186803b15801561101c57600080fd5b505af4158015611030573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049891908101906153c3565b61106061175d565b60005b81518110156111625781818151811061107e5761107e615078565b6020026020010151606783838151811061109a5761109a615078565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b1580156110da57600080fd5b505afa1580156110ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111691908101906153f7565b6040516111239190614ff2565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561115b816150a4565b9050611063565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b8152506067816040516111979190614ff2565b90815260405190819003602001902054336001600160a01b03909116146111d05760405162461bcd60e51b81526004016106419061500e565b60006111f93385602001518660600151876040015188608001518960a001518a60e001516114dd565b6000818152606b6020526040812060c08701519293509160ff1661128d57610120860151604080518454602081810283018401845282018181526112869493879284929184919084018282801561126f57602002820191906000526020600020905b81548152602001906001019080831161125b575b50505050508152505061154c90919063ffffffff16565b90506112ff565b610120860151604080518454602081810283018401845282018181526112fc949387928492918491908401828280156112e557602002820191906000526020600020905b8154815260200190600101908083116112d1575b5050505050815250506115e190919063ffffffff16565b90505b806113375760c086015160ff1661132657610120860151611321908390611c3f565b611337565b610120860151611337908390611cef565b935050505b50919050565b606060003385858560405160200161135d9493929190615045565b6040516020818303038152906040528051906020012090506000606a6000838152602001908152602001600020805461139590614fbd565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190614fbd565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b509396505050505050505b9392505050565b61142861175d565b6001600160a01b03811661148d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610641565b610a90816117b7565b60408051600080825260208201909252606091908161077b565b60408051808201909152606080825260208201528152602001906001900390816114b05790505092915050565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b60006115d5836000015160008151811061156857611568615078565b602002602001015160018460006008611581919061543f565b61158c90600461543f565b61159790600861543f565b6115a290600461543f565b6115ad90601061543f565b6115b890601861543f565b6115c390602061543f565b6115cd919061543f565b60ff16611d67565b60011490505b92915050565b60006115d583600001516000815181106115fd576115fd615078565b602002602001015160018460006008611616919061543f565b61162190600461543f565b61162c90600861543f565b61163790600461543f565b61164290601061543f565b61164d90601861543f565b6115b890602061543f565b6000611665826002611d86565b905060005b815181101561175557600061169f61169a84848151811061168d5761168d615078565b6020026020010151611dca565b611e47565b905060006116cf846116b2856001615464565b815181106116c2576116c2615078565b602002602001015161196e565b6040805133602082015263ffffffff8b169181019190915261ffff808a1660608301528816608082015260a0810184905290915060009060c00160408051808303601f190181529181528151602092830120600090815260699092529020805460ff191660ff93909316929092179091555061174e9050600282615464565b905061166a565b505050505050565b6033546001600160a01b031633146109805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610641565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118305760405162461bcd60e51b81526004016106419061547c565b610980611e63565b606554611848576301312d006065555b5a606555565b6118566137d1565b604051634b3dfd0160e01b815273__$9adf670328df3ee79279acdb5eff580adf$__90634b3dfd019061188d908690600401615598565b60006040518083038186803b1580156118a557600080fd5b505af41580156118b9573d6000803e3d6000fd5b509395945050505050565b60606115db8230611e93565b60006115db8260a001516010600060086118ea9190615464565b611d67565b60006115db8260a001516010600060086119099190615464565b6118ea906010615464565b61191c6137f7565b61194b8361192b84600161543f565b60ff168151811061193e5761193e615078565b6020026020010151611f46565b60028151811061195d5761195d615078565b602002602001015190509392505050565b80516000901580159061198357508151602110155b61198c57600080fd5b6000806119988461204f565b8151919350915060208210156104985760208290036101000a9004949350505050565b6119c36137d1565b60006119cf8584612096565b905060006119dd86836124b6565b905060005b81518161ffff1610156118b9576000808860600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b91906151ea565b6001600160a01b0316632c34025e8a606001516101000151611a908c606001516118d0565b611a9d8d606001516129b0565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015261ffff909116602483015260ff16604482015260640160006040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b29919081019061590d565b91509150600073__$9adf670328df3ee79279acdb5eff580adf$__630d08d16883600001518c606001516101400151611b658e606001516129d5565b886040518563ffffffff1660e01b8152600401611b859493929190615b22565b60206040518083038186803b158015611b9d57600080fd5b505af4158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd59190615c2e565b9050611be2816001615464565b9050611c2b8a85878761ffff1681518110611bff57611bff615078565b6020026020010151898861ffff1681518110611c1d57611c1d615078565b602002602001015185612a10565b50505080611c3890615c47565b90506119e2565b611cc982600001600081548110611c5857611c58615078565b90600052602060002001546001808460006008611c75919061543f565b611c8090600461543f565b611c8b90600861543f565b611c9690600461543f565b611ca190601061543f565b611cac90601861543f565b611cb790602061543f565b611cc1919061543f565b60ff16612b5e565b82600001600081548110611cdf57611cdf615078565b6000918252602090912001555050565b611cc982600001600081548110611d0857611d08615078565b90600052602060002001546001808460006008611d25919061543f565b611d3090600461543f565b611d3b90600861543f565b611d4690600461543f565b611d5190601061543f565b611d5c90601861543f565b611cac90602061543f565b91821c91600080611d7b600180861b615c69565b909416949350505050565b60606000611d9b611d9685612b83565b611f46565b9050610498611db8828560ff168151811061193e5761193e615078565b60028151811061193e5761193e615078565b8051606090611dd857600080fd5b600080611de48461204f565b915091506000816001600160401b03811115611e0257611e026138e9565b6040519080825280601f01601f191660200182016040528015611e2c576020820181803683370190505b50905060208101611e3e848285612ba9565b50949350505050565b6000815160001415611e5b57506000919050565b506020015190565b600054610100900460ff16611e8a5760405162461bcd60e51b81526004016106419061547c565b610980336117b7565b60606000611ea8611d96856101600151612b83565b905060005b8151811015611f3b576000611eef611ed084848151811061193e5761193e615078565b600081518110611ee257611ee2615078565b6020026020010151612c28565b9050846001600160a01b0316816001600160a01b03161415611f2a57611f2083838151811061193e5761193e615078565b93505050506115db565b50611f34816150a4565b9050611ead565b506060949350505050565b6060611f5182612c42565b611f5a57600080fd5b6000611f6583612c7b565b90506000816001600160401b03811115611f8157611f816138e9565b604051908082528060200260200182016040528015611fba57816020015b611fa76137f7565b815260200190600190039081611f9f5790505b5090506000611fcc8560200151612cfe565b8560200151611fdb9190615464565b90506000805b8481101561204457611ff283612d79565b915060405180604001604052808381526020018481525084828151811061201b5761201b615078565b60209081029190910101526120308284615464565b92508061203c816150a4565b915050611fe1565b509195945050505050565b60008060006120618460200151612cfe565b905060008185602001516120759190615464565b905060008286600001516120899190615c69565b9196919550909350505050565b606060006120a784606001516129d5565b60ff166001600160401b038111156120c1576120c16138e9565b6040519080825280602002602001820160405280156120ea578160200160208202803683370190505b50905060005b6120fd85606001516129d5565b60ff168110156124ae57600182828151811061211b5761211b615078565b602090810291909101015260ff8416606414156122545760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561217557600080fd5b505afa158015612189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ad91906151ea565b6060870151610100810151906121c2906118d0565b6121cf89606001516118ef565b6040516020016121e294939291906150bf565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b03169061222182600883611d67565b905060ff81166001141561225057600085858151811061224357612243615078565b6020026020010181815250505b5050505b600082828151811061226857612268615078565b6020026020010151111561249e57600060676040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516122af9190614ff2565b908152604051908190036020019020546001600160a01b03166352456227836001600160401b038111156122e5576122e56138e9565b6040519080825280601f01601f19166020018201604052801561230f576020820181803683370190505b5060608901516020810151610100820151909161232b906118d0565b6123388c606001516118ef565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b168152612370989796959493929190600401615c80565b602060405180830381600087803b15801561238a57600080fd5b505af115801561239e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c29190615c2e565b905060018114156124215760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b6064820152608401610641565b60028114156124725760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f74207265616368006044820152606401610641565b61247e61271082615ce8565b83838151811061249057612490615078565b602002602001018181525050505b6124a7816150a4565b90506120f0565b509392505050565b606060008360600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124fb57600080fd5b505afa15801561250f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253391906151ea565b6001600160a01b03166305cce54f8560600151610100015161255887606001516118ef565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b15801561259e57600080fd5b505afa1580156125b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125da9190810190615d0a565b905060006125eb85606001516129d5565b60ff166001600160401b03811115612605576126056138e9565b60405190808252806020026020018201604052801561262e578160200160208202803683370190505b509050600061264086606001516129d5565b60ff166001600160401b0381111561265a5761265a6138e9565b604051908082528060200260200182016040528015612683578160200160208202803683370190505b509050600061269587606001516129d5565b60ff166001600160401b038111156126af576126af6138e9565b6040519080825280602002602001820160405280156126d8578160200160208202803683370190505b50905060005b84518110156129a45760005b6126f789606001516129d5565b60ff168110156129935760008960600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561274457600080fd5b505afa158015612758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277c91906151ea565b60608b015161010081015190612791906118ef565b8986815181106127a3576127a3615078565b60200260200101516040516020016127be9493929190615045565b6040516020818303038152906040528051906020012090506000606a600083815260200190815260200160002080546127f690614fbd565b80601f016020809104026020016040519081016040528092919081815260200182805461282290614fbd565b801561286f5780601f106128445761010080835404028352916020019161286f565b820191906000526020600020905b81548152906001019060200180831161285257829003601f168201915b505050505090506000612883826000612e1d565b90508088858151811061289857612898615078565b602002602001018181516128ac9190615d98565b61ffff169052508a518b90859081106128c7576128c7615078565b60200260200101518885815181106128e1576128e1615078565b602002602001015161ffff1610158015612915575085848151811061290857612908615078565b6020908102919091010151155b1561297f5788858151811061292c5761292c615078565b602002602001015187858151811061294657612946615078565b602002602001019060ff16908160ff1681525050600186858151811061296e5761296e615078565b911515602092830291909101909101525b5050508061298c906150a4565b90506126ea565b5061299d816150a4565b90506126de565b50909695505050505050565b60006115db8260a001516008600060086129ca9190615464565b611909906010615464565b60006115db8260a001516010600060086129ef9190615464565b6129fa906010615464565b612a05906010615464565b6118ea906008615464565b6000612a1a612e5b565b60ff851660408201526060870151909150612a34906129b0565b60ff1681526001602082015260c081018390526060860151612a5590612ea2565b63ffffffff1660a08201526001610120820181905260408051828152808201909152906020808301908036833750505061014082015260408051600180825281830190925290602080830190803683375050506101608201526101408101518051839190600090612ac857612ac8615078565b602002602001018181525050612aea6040518060200160405280606081525090565b612af48183612edd565b6000612b26338960600151602001518a6060015161010001518b602001518c6060015160c001518d600001518d6114dd565b6000818152606b602090815260409091208451805193945085939192612b5192849290910190613811565b5050505050505050505050565b600083821b8183612b72600180881b615c69565b901b19969096161795945050505050565b612b8b6137f7565b50604080518082019091528151815260209182019181019190915290565b80612bb357505050565b60208110612beb5782518252612bca602084615464565b9250612bd7602083615464565b9150612be4602082615c69565b9050612bb3565b8015610efd5760006001612c00836020615c69565b612c0c90610100615ea2565b612c169190615c69565b84518451821691191617835250505050565b8051600090601514612c3957600080fd5b6115db8261196e565b8051600090612c5357506000919050565b6020820151805160001a9060c0821015612c71575060009392505050565b5060019392505050565b8051600090612c8c57506000919050565b600080612c9c8460200151612cfe565b8460200151612cab9190615464565b9050600084600001518560200151612cc39190615464565b90505b80821015612cf557612cd782612d79565b612ce19083615464565b915082612ced816150a4565b935050612cc6565b50909392505050565b8051600090811a6080811015612d175750600092915050565b60b8811080612d32575060c08110801590612d32575060f881105b15612d405750600192915050565b60c0811015612d6d57612d55600160b8615eae565b612d629060ff1682615c69565b611419906001615464565b612d55600160f8615eae565b80516000908190811a6080811015612d94576001915061077b565b60b8811015612dba57612da8608082615c69565b612db3906001615464565b915061077b565b60c0811015612de75760b78103600185019450806020036101000a8551046001820181019350505061077b565b60f8811015612dfb57612da860c082615c69565b60019390930151602084900360f7016101000a900490920160f5190192915050565b600080612e2c611d9685612b83565b9050610498612e49828560ff168151811061193e5761193e615078565b6002815181106116c2576116c2615078565b612e6361384b565b612e6b61384b565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60006115db8260a00151602060006008612ebc9190615464565b612ec7906010615464565b612ed2906010615464565b611909906008615464565b60c081015160019015612ef85780612ef4816150a4565b9150505b8160e0015161271014612f135780612f0f816150a4565b9150505b81610100015161271014612f2f5780612f2b816150a4565b9150505b61014082015151151580612f4857506101608201515115155b80612f5857506101a08201515115155b15612fca576000826101600151518361014001515111612f9d57826101a00151518361016001515111612f9157826101a0015151612fa5565b82610160015151612fa5565b826101400151515b9050612fb2816004615ed1565b612fbc9083615464565b60ff90911661012084015290505b806001600160401b03811115612fe257612fe26138e9565b60405190808252806020026020018201604052801561300b578160200160208202803683370190505b508352815161301b90849061346e565b6130298383602001516134c6565b6130378383606001516134ff565b61304583836040015161354e565b61305483836101200151613592565b60008060019050836080015162ffffff16612710146130895761307b858560800151613623565b613086600183615d98565b91505b8360a0015163ffffffff16612710146130b8576130aa858560a0015161368a565b6130b5600283615d98565b91505b60c0840151156130fe5760c08401518551826130d3816150a4565b9350815181106130e5576130e5615078565b60209081029190910101526130fb600483615d98565b91505b8360e00151612710146131475760e084015185518261311c816150a4565b93508151811061312e5761312e615078565b6020908102919091010152613144600883615d98565b91505b8361010001516127101461319257610100840151855182613167816150a4565b93508151811061317957613179615078565b602090810291909101015261318f601083615d98565b91505b61012084015160ff161561345d5760005b84610120015160ff1681101561344e576000856101400151511180156131ce57508461014001515181105b156132255784610140015181815181106131ea576131ea615078565b602002602001015186600001518380613202906150a4565b94508151811061321457613214615078565b602002602001018181525050613253565b855160009083613234816150a4565b94508151811061324657613246615078565b6020026020010181815250505b60008561016001515111801561326e57508461016001515181105b156132c557846101600151818151811061328a5761328a615078565b6020026020010151866000015183806132a2906150a4565b9450815181106132b4576132b4615078565b6020026020010181815250506132f3565b8551600090836132d4816150a4565b9450815181106132e6576132e6615078565b6020026020010181815250505b60008561018001515111801561330e57508461018001515181105b1561336857846101800151818151811061332a5761332a615078565b602002602001015160ff1686600001518380613345906150a4565b94508151811061335757613357615078565b602002602001018181525050613395565b8551819083613376816150a4565b94508151811061338857613388615078565b6020026020010181815250505b6000856101a00151511180156133b05750846101a001515181105b1561341057846101a0015181815181106133cc576133cc615078565b60200260200101516001600160a01b0316866000015183806133ed906150a4565b9450815181106133ff576133ff615078565b60200260200101818152505061343e565b85516000908361341f816150a4565b94508151811061343157613431615078565b6020026020010181815250505b613447816150a4565b90506131a3565b5061345a602083615d98565b91505b61346785836136fd565b5050505050565b6134a3826000015160008151811061348857613488615078565b60200260200101518260ff16600860ff16600060ff16612b5e565b825180516000906134b6576134b6615078565b6020026020010181815250505050565b6134a382600001516000815181106134e0576134e0615078565b60200260200101518260ff16600460ff1660006008611cc1919061543f565b6134a3826000015160008151811061351957613519615078565b60200260200101518260ff16600460ff1660006008613538919061543f565b61354390600461543f565b611cc190600861543f565b6134a3826000015160008151811061356857613568615078565b60200260200101518260ff16600860ff1660006008613587919061543f565b611cc190600461543f565b6134a382600001516000815181106135ac576135ac615078565b60200260200101518260ff16600860ff16600060086135cb919061543f565b6135d690600461543f565b6135e190600861543f565b6135ec90600461543f565b6135f790601061543f565b61360290601861543f565b61360d90602061543f565b61361890602061543f565b611cc190602061543f565b6134a3826000015160008151811061363d5761363d615078565b60200260200101518262ffffff16601860ff166000600861365e919061543f565b61366990600461543f565b61367490600861543f565b61367f90600461543f565b611cc190601061543f565b6134a382600001516000815181106136a4576136a4615078565b60200260200101518263ffffffff16602060ff16600060086136c6919061543f565b6136d190600461543f565b6136dc90600861543f565b6136e790600461543f565b6136f290601061543f565b611cc190601861543f565b6134a3826000015160008151811061371757613717615078565b60200260200101518261ffff16601060ff1660006008613737919061543f565b61374290600461543f565b61358790600861543f565b82805461375990614fbd565b90600052602060002090601f01602090048101928261377b57600085556137c1565b82601f1061379457805160ff19168380011785556137c1565b828001600101855582156137c1579182015b828111156137c15782518255916020019190600101906137a6565b506137cd9291506138d4565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156137c157916020028201828111156137c15782518255916020019190600101906137a6565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156137cd57600081556001016138d5565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613922576139226138e9565b60405290565b60405160a081016001600160401b0381118282101715613922576139226138e9565b604080519081016001600160401b0381118282101715613922576139226138e9565b604051608081016001600160401b0381118282101715613922576139226138e9565b60405161018081016001600160401b0381118282101715613922576139226138e9565b604051606081016001600160401b0381118282101715613922576139226138e9565b60405161016081016001600160401b0381118282101715613922576139226138e9565b604051601f8201601f191681016001600160401b0381118282101715613a1e57613a1e6138e9565b604052919050565b6001600160a01b0381168114610a9057600080fd5b8035613a4681613a26565b919050565b803563ffffffff81168114613a4657600080fd5b60ff81168114610a9057600080fd5b8035613a4681613a5f565b803561ffff81168114613a4657600080fd5b60006101408284031215613a9e57600080fd5b613aa66138ff565b613aaf83613a3b565b8152613abd60208401613a3b565b6020820152613ace60408401613a3b565b6040820152613adf60608401613a4b565b6060820152613af060808401613a4b565b6080820152613b0160a08401613a3b565b60a0820152613b1260c08401613a6e565b60c0820152613b2360e08401613a79565b60e0820152610100613b36818501613a6e565b90820152610120613b48848201613a6e565b908201529392505050565b60006001600160401b03821115613b6c57613b6c6138e9565b50601f01601f191660200190565b600082601f830112613b8b57600080fd5b8135613b9e613b9982613b53565b6139f6565b818152846020838601011115613bb357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613bed57600080fd5b8835613bf881613a26565b97506020890135613c0881613a26565b96506040890135613c1881613a26565b9550613c2660608a01613a4b565b94506080890135613c3681613a26565b9350613c4460a08a01613a4b565b925060c08901356001600160401b03811115613c5f57600080fd5b613c6b8b828c01613b7a565b925050613c7a60e08a01613a79565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613cce5783518252928401926001929092019190840190613cae565b509695505050505050565b60005b83811015613cf4578181015183820152602001613cdc565b83811115613d03576000848401525b50505050565b60008151808452613d21816020860160208601613cd9565b601f01601f19169290920160200192915050565b6020815260006114196020830184613d09565b600060208284031215613d5a57600080fd5b5035919050565b60008060008060008060c08789031215613d7a57600080fd5b8635613d8581613a26565b95506020870135613d9581613a26565b9450613da360408801613a4b565b93506060870135613db381613a26565b9250613dc160808801613a4b565b9150613dcf60a08801613a79565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b818110156129a45783516001600160a01b031683529284019291840191600101613e04565b60008060008060808587031215613e3f57600080fd5b613e4885613a4b565b9350613e5660208601613a79565b92506040850135613e6681613a5f565b915060608501356001600160401b03811115613e8157600080fd5b613e8d87828801613b7a565b91505092959194509250565b60006001600160401b03821115613eb257613eb26138e9565b5060051b60200190565b60006020808385031215613ecf57600080fd5b82356001600160401b0380821115613ee657600080fd5b818501915085601f830112613efa57600080fd5b8135613f08613b9982613e99565b81815260059190911b83018401908481019088831115613f2757600080fd5b8585015b83811015613f5f57803585811115613f435760008081fd5b613f518b89838a0101613b7a565b845250918601918601613f2b565b5098975050505050505050565b600080600080600060a08688031215613f8457600080fd5b613f8d86613a4b565b9450613f9b60208701613a79565b9350613fa960408701613a79565b92506060860135613fb981613a5f565b915060808601356001600160401b03811115613fd457600080fd5b613fe088828901613b7a565b9150509295509295909350565b600082601f830112613ffe57600080fd5b8135602061400e613b9983613e99565b82815260059290921b8401810191818101908684111561402d57600080fd5b8286015b84811015613cce5780356001600160401b038082111561405057600080fd5b9088019060a0828b03601f1901121561406857600080fd5b614070613928565b8683013561407d81613a5f565b815260408381013561408e81613a26565b828901526060848101358284015260808501359083015260a0840135838111156140b85760008081fd5b8085019450508b603f8501126140d057600092508283fd5b8784013592506140e2613b9984613e99565b83815260069390931b8401810192888101908d8511156141025760008081fd5b948201945b848610156141595782868f03121561411f5760008081fd5b61412761394a565b61413087613a4b565b81528a8701358060040b81146141465760008081fd5b818c015282529482019490890190614107565b6080840152505085525050918301918301614031565b60006080828403121561418157600080fd5b61418961396c565b9050813561419681613a26565b815260208201356141a681613a5f565b602082015260408201356001600160401b03808211156141c557600080fd5b6141d185838601613b7a565b604084015260608401359150808211156141ea57600080fd5b506141f784828501613b7a565b60608301525092915050565b6000806040838503121561421657600080fd5b82356001600160401b038082111561422d57600080fd5b9084019060a0828703121561424157600080fd5b614249613928565b823561425481613a26565b8152602083013561426481613a26565b6020820152604083013561427781613a26565b604082015260608301358281111561428e57600080fd5b830161018081890312156142a157600080fd5b6142a961398e565b6142b282613a3b565b81526142c060208301613a3b565b60208201526142d160408301613a3b565b60408201526142e260608301613a3b565b60608201526080820135608082015260a082013560a082015261430760c08301613a4b565b60c082015261431860e08301613a4b565b60e082015261010061432b818401613a4b565b9082015261012061433d838201613a6e565b90820152610140828101358581111561435557600080fd5b6143618b828601613fed565b828401525050610160808301358581111561437b57600080fd5b6143878b828601613b7a565b82840152505080606084015250506143a160808401613a6e565b6080820152935060208501359150808211156143bc57600080fd5b506143c98582860161416f565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261440e60a0840182613d09565b90506060840151601f1984830301608085015261442b8282613d09565b95945050505050565b600082601f83011261444557600080fd5b81356020614455613b9983613e99565b82815260059290921b8401810191818101908684111561447457600080fd5b8286015b84811015613cce5780358352918301918301614478565b600082601f8301126144a057600080fd5b813560206144b0613b9983613e99565b82815260059290921b840181019181810190868411156144cf57600080fd5b8286015b84811015613cce5780356144e681613a26565b83529183019183016144d3565b600082601f83011261450457600080fd5b81356020614514613b9983613e99565b82815260059290921b8401810191818101908684111561453357600080fd5b8286015b84811015613cce5780356001600160401b038082111561455657600080fd5b90880190601f196080838c038201121561456f57600080fd5b61457761396c565b878401358381111561458857600080fd5b84016060818e038401121561459c57600080fd5b6145a46139b1565b9250888101356145b381613a5f565b83526040818101356145c481613a26565b848b01526060820135858111156145da57600080fd5b6145e88f8c83860101614434565b82860152508383526145fb818701613a6e565b8a840152606086013593508484111561461357600080fd5b6146218e8b8689010161448f565b9083015250608084013591508282111561463a57600080fd5b6146488c8984870101614434565b60608201528652505050918301918301614537565b600082601f83011261466e57600080fd5b8135602061467e613b9983613e99565b82815260059290921b8401810191818101908684111561469d57600080fd5b8286015b84811015613cce5780356001600160401b038111156146c05760008081fd5b6146ce8986838b0101613b7a565b8452509183019183016146a1565b600082601f8301126146ed57600080fd5b813560206146fd613b9983613e99565b82815260059290921b8401810191818101908684111561471c57600080fd5b8286015b84811015613cce5780356001600160401b03808211156147405760008081fd5b9088019060a0828b03601f190181131561475a5760008081fd5b614762613928565b87840135838111156147745760008081fd5b6147828d8a838801016144f3565b8252506040614792818601613a6e565b8983015260606147a3818701613a3b565b828401526080915081860135858111156147bd5760008081fd5b6147cb8f8c838a010161448f565b828501525050828501359250838311156147e55760008081fd5b6147f38d8a8588010161465d565b908201528652505050918301918301614720565b600082601f83011261481857600080fd5b81356020614828613b9983613e99565b82815260059290921b8401810191818101908684111561484757600080fd5b8286015b84811015613cce57803561485e81613a5f565b835291830191830161484b565b80356001600160401b0381168114613a4657600080fd5b600082601f83011261489357600080fd5b813560206148a3613b9983613e99565b82815260059290921b840181019181810190868411156148c257600080fd5b8286015b84811015613cce5780356001600160401b03808211156148e65760008081fd5b90880190610160828b03601f19018113156149015760008081fd5b6149096139d3565b614914888501613a79565b81526040614923818601613a79565b898301526060614934818701613a6e565b8284015260809150614947828701613a4b565b9083015260a0614958868201613a6e565b8284015260c0915061496b828701613a4b565b9083015260e061497c868201613a4b565b82840152610100915061499082870161486b565b9083015261012085810135858111156149a95760008081fd5b6149b78f8c838a010161448f565b8385015250610140915081860135858111156149d35760008081fd5b6149e18f8c838a010161465d565b8285015250506149f2838601613a3b565b9082015286525050509183019183016148c6565b600082601f830112614a1757600080fd5b81356020614a27613b9983613e99565b82815260059290921b84018101918181019086841115614a4657600080fd5b8286015b84811015613cce5780356001600160401b0380821115614a6a5760008081fd5b9088019060a0828b03601f1901811315614a845760008081fd5b614a8c613928565b614a97888501613a4b565b815260408085013584811115614aad5760008081fd5b614abb8e8b83890101613b7a565b8a8401525060608086013585811115614ad45760008081fd5b614ae28f8c838a0101613b7a565b8385015250608091508186013585811115614afd5760008081fd5b614b0b8f8c838a0101613b7a565b828501525050614b1c838601613a6e565b908201528652505050918301918301614a4a565b60008060408385031215614b4357600080fd5b614b4c83613a4b565b915060208301356001600160401b0380821115614b6857600080fd5b908401906101608287031215614b7d57600080fd5b614b856139d3565b823582811115614b9457600080fd5b614ba0888286016146dc565b825250602083013582811115614bb557600080fd5b614bc188828601614807565b602083015250604083013582811115614bd957600080fd5b614be588828601614882565b604083015250606083013582811115614bfd57600080fd5b614c0988828601614a06565b606083015250608083013582811115614c2157600080fd5b614c2d88828601614807565b60808301525060a083013582811115614c4557600080fd5b614c518882860161448f565b60a08301525060c083013582811115614c6957600080fd5b614c758882860161448f565b60c083015250614c8760e08401613a4b565b60e0820152610100614c9a818501613a4b565b90820152610120614cac848201613a6e565b908201526101408381013583811115614cc457600080fd5b614cd089828701613b7a565b8284015250508093505050509250929050565b600060208284031215614cf557600080fd5b81356001600160401b0380821115614d0c57600080fd5b908301906101608286031215614d2157600080fd5b614d296139d3565b614d3283613a3b565b8152614d4060208401613a3b565b6020820152614d5160408401613a4b565b6040820152614d6260608401613a79565b6060820152614d7360808401613a79565b6080820152614d8460a08401613a6e565b60a0820152614d9560c08401613a3b565b60c0820152614da660e08401613a4b565b60e0820152610100614db9818501613a3b565b90820152610120614dcb848201613a6e565b908201526101408381013583811115614de357600080fd5b614def88828701613b7a565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614e5557603f19888603018452614e43858351613d09565b94509285019290850190600101614e27565b5092979650505050505050565b600060208284031215614e7457600080fd5b81356001600160401b03811115614e8a57600080fd5b6104988482850161448f565b600080600060608486031215614eab57600080fd5b614eb484613a4b565b9250614ec260208501613a79565b91506040840135614ed281613a5f565b809150509250925092565b600060208284031215614eef57600080fd5b813561141981613a26565b600081518084526020808501945080840160005b83811015614f2d57815160ff1687529582019590820190600101614f0e565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614faf57888303603f1901855281518051878552614f8388860182614efa565b91890151858303868b0152919050614f9b8183614efa565b968901969450505090860190600101614f5f565b509098975050505050505050565b600181811c90821680614fd157607f821691505b6020821081141561133c57634e487b7160e01b600052602260045260246000fd5b60008251615004818460208701613cd9565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156150b8576150b861508e565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b038616815263ffffffff8516602082015261ffff84811660408301528316606082015260a06080820181905260009061513490830184613d09565b979650505050505050565b60006020828403121561515157600080fd5b81516001600160801b038116811461141957600080fd5b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b80518015158114613a4657600080fd5b6000602082840312156151d657600080fd5b611419826151b4565b8051613a4681613a26565b6000602082840312156151fc57600080fd5b815161141981613a26565b60408152615219604082018451613ddb565b6000602084015161522d6060840182613ddb565b50604084015163ffffffff8116608084015250606084015161ffff811660a084015250608084015161ffff811660c08401525060a084015160ff811660e08401525060c084015161010061528381850183613ddb565b60e0860151915061012061529e8186018463ffffffff169052565b908601519150610140906152b485830184613ddb565b86015191506101606152ca8582018460ff169052565b8187015192508061018086015250506152e76101a0840182613d09565b91505061141960208301846001600160801b03169052565b600061530d613b9984613b53565b905082815283838301111561532157600080fd5b611419836020830184613cd9565b600082601f83011261534057600080fd5b81516020615350613b9983613e99565b82815260059290921b8401810191818101908684111561536f57600080fd5b8286015b84811015613cce5780516001600160401b038111156153925760008081fd5b8701603f810189136153a45760008081fd5b6153b58986830151604084016152ff565b845250918301918301615373565b6000602082840312156153d557600080fd5b81516001600160401b038111156153eb57600080fd5b6104988482850161532f565b60006020828403121561540957600080fd5b81516001600160401b0381111561541f57600080fd5b8201601f8101841361543057600080fd5b610498848251602084016152ff565b600060ff821660ff84168060ff0382111561545c5761545c61508e565b019392505050565b600082198211156154775761547761508e565b500190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081518084526020808501808196508360051b810191508286016000805b8681101561558a578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015615574578451805163ffffffff1685528b015160040b8b850152938a01939281019260019290920191615542565b5050509a87019a955050918501916001016154e6565b509298975050505050505050565b60208152600060018060a01b0380845116602084015280602085015116604084015280604085015116606084015250606083015160a060808401526155e160c084018251613ddb565b60208101516155f360e0850182613ddb565b50604081015161010061560881860183613ddb565b6060830151915061012061561e81870184613ddb565b60808401519250610140838188015260a08501519350610160848189015260c08601519450610180615657818a018763ffffffff169052565b60e087015163ffffffff9081166101a08b015285880151166101c08a01528387015160ff166101e08a0152828701516102008a0191909152945061569f6102408901866154c7565b95015187860360bf19016102208901529493506156c29250839150849050613d09565b91505060808401516124ae60a085018260ff169052565b8051613a4681613a5f565b600082601f8301126156f557600080fd5b81516020615705613b9983613e99565b82815260059290921b8401810191818101908684111561572457600080fd5b8286015b84811015613cce5780518352918301918301615728565b600082601f83011261575057600080fd5b81516020615760613b9983613e99565b82815260059290921b8401810191818101908684111561577f57600080fd5b8286015b84811015613cce57805161579681613a26565b8352918301918301615783565b600082601f8301126157b457600080fd5b815160206157c4613b9983613e99565b82815260059290921b840181019181810190868411156157e357600080fd5b8286015b84811015613cce5780516001600160401b038082111561580657600080fd5b90880190601f196080838c038201121561581f57600080fd5b61582761396c565b878401518381111561583857600080fd5b84016060818e038401121561584c57600080fd5b6158546139b1565b92508881015161586381613a5f565b835260408181015161587481613a26565b848b015260608201518581111561588a57600080fd5b6158988f8c838601016156e4565b82860152508383526158ab8187016156d9565b8a84015260608601519350848411156158c357600080fd5b6158d18e8b8689010161573f565b908301525060808401519150828211156158ea57600080fd5b6158f88c89848701016156e4565b606082015286525050509183019183016157e7565b6000806040838503121561592057600080fd5b615929836151b4565b915060208301516001600160401b038082111561594557600080fd5b9084019060a0828703121561595957600080fd5b615961613928565b82518281111561597057600080fd5b61597c888286016157a3565b82525061598b602084016156d9565b602082015261599c604084016151df565b60408201526060830151828111156159b357600080fd5b6159bf8882860161573f565b6060830152506080830151828111156159d757600080fd5b6159e38882860161532f565b6080830152508093505050509250929050565b600081518084526020808501945080840160005b83811015614f2d57815187529582019590820190600101615a0a565b600081518084526020808501945080840160005b83811015614f2d5781516001600160a01b031687529582019590820190600101615a3a565b600081518084526020808501808196508360051b810191508286016000805b8681101561558a578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015615b0c578451805163ffffffff1685528b015160040b8b850152938a01939281019260019290920191615ada565b5050509a87019a95505091850191600101615a7e565b6000608080830181845280885180835260a092508286019150828160051b8701016020808c0160005b84811015615bf657898403609f1901865281518051898652805160ff168a870152848101516001600160a01b031689870152604090810151606060c08801819052909190615b9c60e08901846159f6565b925086840151615bb0888a018260ff169052565b5081840151888403838a0152615bc68482615a26565b935050808401519350878303818901525050615be281836159f6565b978501979550505090820190600101615b4b565b505087820390880152615c09818b615a5f565b95505050505050615c1f604083018560ff169052565b61ffff8316606083015261442b565b600060208284031215615c4057600080fd5b5051919050565b600061ffff80831681811415615c5f57615c5f61508e565b6001019392505050565b600082821015615c7b57615c7b61508e565b500390565b6000610100808352615c948184018c613d09565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b600082615d0557634e487b7160e01b600052601260045260246000fd5b500690565b60006020808385031215615d1d57600080fd5b82516001600160401b03811115615d3357600080fd5b8301601f81018513615d4457600080fd5b8051615d52613b9982613e99565b81815260059190911b82018301908381019087831115615d7157600080fd5b928401925b82841015615134578351615d8981613a5f565b82529284019290840190615d76565b600061ffff808316818516808303821115615db557615db561508e565b01949350505050565b600181815b80851115615df9578160001904821115615ddf57615ddf61508e565b80851615615dec57918102915b93841c9390800290615dc3565b509250929050565b600082615e10575060016115db565b81615e1d575060006115db565b8160018114615e335760028114615e3d57615e59565b60019150506115db565b60ff841115615e4e57615e4e61508e565b50506001821b6115db565b5060208310610133831016604e8410600b8410161715615e7c575081810a6115db565b615e868383615dbe565b8060001904821115615e9a57615e9a61508e565b029392505050565b60006114198383615e01565b600060ff821660ff841680821015615ec857615ec861508e565b90039392505050565b6000816000190483118215151615615eeb57615eeb61508e565b50029056fea26469706673582212207525d6d060c27c57c782c4671c47af1b1ab2f8a1516e21cb14e8c07592d8d10c64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101385760003560e01c80638129fc1c116100b35780638129fc1c146102855780638da5cb5b1461028d57806395edcb08146102a8578063a903620c146102c8578063af84b51f146102db578063b41bd789146102fb578063b4b703521461030e578063cac255c214610321578063d0d35b5514610344578063f2fde38b14610357578063f2fe4fa51461036a578063f96f58271461037f57600080fd5b80631cc4f0411461013d5780631eda6e4f1461016557806334c76b2514610185578063394a7398146101b75780634b2dbcb8146101ca5780634b2e9b41146101ca57806354fd4d50146101fe5780635790c2941461020d57806362329cc5146102225780636a356578146102355780636dabaf041461026a578063715018a61461027d575b600080fd5b61015061014b366004613a8b565b6103c0565b60405190151581526020015b60405180910390f35b610178610173366004613bd0565b6104a0565b60405161015c9190613c89565b60408051808201909152600d81526c20b63637b1b0ba32a630bcb2b960991b60208201525b60405161015c9190613d35565b6101aa6101c5366004613d48565b610536565b6101f16101d8366004613d61565b5050604080516000815260208101909152949350505050565b60405161015c9190613de8565b6040516001815260200161015c565b61022061021b366004613e29565b6105d0565b005b6101f1610230366004613ebc565b6106a5565b610258610243366004613d48565b60696020526000908152604090205460ff1681565b60405160ff909116815260200161015c565b610150610278366004613f6c565b610782565b61022061096e565b610220610982565b6033546040516001600160a01b03909116815260200161015c565b6102bb6102b6366004614203565b610a93565b60405161015c91906143d3565b6102206102d6366004614b30565b610e85565b6102ee6102e9366004614ce3565b610f02565b60405161015c9190614e00565b610220610309366004614e62565b611058565b61015061031c366004613a8b565b611166565b61025861032f366004613d48565b60009081526069602052604090205460ff1690565b6101aa610352366004614e96565b611342565b610220610365366004614edd565b611420565b610372611496565b60405161015c9190614f38565b6103a861038d366004613d48565b6068602052600090815260409020546001600160801b031681565b6040516001600160801b03909116815260200161015c565b6000806103ee836000015184602001518560600151866040015187608001518860a001518960e001516114dd565b6000818152606b602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561044d57602002820191906000526020600020905b815481526020019060010190808311610439575b505050505081525050905060008060ff168560c0015160ff1614156104845761012085015161047d90839061154c565b9050610498565b6101208501516104959083906115e1565b90505b949350505050565b60408051602081019091526060815260006104c08a898989898e896114dd565b6000818152606b6020908152604091829020825181548084028201850185529281018381529495509390928492849184018282801561051e57602002820191906000526020600020905b81548152602001906001019080831161050a575b50505050508152505091505098975050505050505050565b606a602052600090815260409020805461054f90614fbd565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90614fbd565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b505050505081565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506067816040516106089190614ff2565b90815260405190819003602001902054336001600160a01b039091161461064a5760405162461bcd60e51b81526004016106419061500e565b60405180910390fd5b6000338686866040516020016106639493929190615045565b60408051601f1981840301815291815281516020928301206000818152606a845291909120855191935061069c9290919086019061374d565b50505050505050565b6060600082516001600160401b038111156106c2576106c26138e9565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b815181101561077b57606784828151811061070e5761070e615078565b60200260200101516040516107239190614ff2565b9081526040519081900360200190205482516001600160a01b039091169083908390811061075357610753615078565b6001600160a01b0390921660209283029190910190910152610774816150a4565b90506106f1565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506067816040516107c39190614ff2565b90815260405190819003602001902054336001600160a01b03909116146107fc5760405162461bcd60e51b81526004016106419061500e565b60ff8416158061080f575060ff84166001145b156109615760003388888860405160200161082d94939291906150bf565b60405160208183030381529060405280519060200120905073__$9adf670328df3ee79279acdb5eff580adf$__6346fb8fe660676040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516108969190614ff2565b908152604051908190036020018120546001600160e01b031960e084901b1682526108d7916001600160a01b03909116908c908c908c908b906004016150f2565b60206040518083038186803b1580156108ef57600080fd5b505af4158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061513f565b600082815260686020526040902080546001600160801b0319166001600160801b039290921691909117905561095f88888887611658565b505b5060019695505050505050565b61097661175d565b61098060006117b7565b565b600054610100900460ff16158080156109a25750600054600160ff909116105b806109bc5750303b1580156109bc575060005460ff166001145b610a1f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610641565b6000805460ff191660011790558015610a42576000805461ff0019166101001790555b610a4a611809565b8015610a90576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610a9b6137d1565b60405180604001604052806006815260200165456e67696e6560d01b815250606781604051610aca9190614ff2565b90815260405190819003602001902054336001600160a01b0390911614610b035760405162461bcd60e51b81526004016106419061500e565b610b0b611838565b308352608084015160ff16610b2b57610b24848461184e565b9250610e7d565b608084015160ff1660011415610e7d576000610b4a85606001516118c4565b9050805160001480610b5d575080516001145b15610cc257604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606791610b9591614ff2565b90815260405160209181900382019020546060870151918201516101008301516001600160a01b039092169263063738cb9290610bd1906118d0565b610bde8a606001516118ef565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610c159796959493929190600401615168565b602060405180830381600087803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906151c4565b15610c7857600a6020850152610cb9565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b8392505061077b565b6060850151600090610cde90610cd9908484611914565b61196e565b905060ff8116600a1415610e4d57604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606791610d1f91614ff2565b90815260405160209181900382019020546060880151918201516101008301516001600160a01b039092169263063738cb9290610d5b906118d0565b610d688b606001516118ef565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610d9f9796959493929190600401615168565b602060405180830381600087803b158015610db957600080fd5b505af1158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df191906151c4565b15610e0257600a6020860152610e43565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b849350505061077b565b60ff81161580610e60575060ff81166064145b15610e7a57610e708686836119bb565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606781604051610ec49190614ff2565b90815260405190819003602001902054336001600160a01b0390911614610efd5760405162461bcd60e51b81526004016106419061500e565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4357600080fd5b505afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b91906151ea565b604080850151606086015160808701519251610f9b9493906020016150bf565b60408051601f198184030181528282528051602091820120600081815260689092529190205463032bd0cd60e41b83529092506001600160801b03169073__$9adf670328df3ee79279acdb5eff580adf$__906332bd0cd0906110049087908590600401615207565b60006040518083038186803b15801561101c57600080fd5b505af4158015611030573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049891908101906153c3565b61106061175d565b60005b81518110156111625781818151811061107e5761107e615078565b6020026020010151606783838151811061109a5761109a615078565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b1580156110da57600080fd5b505afa1580156110ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111691908101906153f7565b6040516111239190614ff2565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561115b816150a4565b9050611063565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b8152506067816040516111979190614ff2565b90815260405190819003602001902054336001600160a01b03909116146111d05760405162461bcd60e51b81526004016106419061500e565b60006111f93385602001518660600151876040015188608001518960a001518a60e001516114dd565b6000818152606b6020526040812060c08701519293509160ff1661128d57610120860151604080518454602081810283018401845282018181526112869493879284929184919084018282801561126f57602002820191906000526020600020905b81548152602001906001019080831161125b575b50505050508152505061154c90919063ffffffff16565b90506112ff565b610120860151604080518454602081810283018401845282018181526112fc949387928492918491908401828280156112e557602002820191906000526020600020905b8154815260200190600101908083116112d1575b5050505050815250506115e190919063ffffffff16565b90505b806113375760c086015160ff1661132657610120860151611321908390611c3f565b611337565b610120860151611337908390611cef565b935050505b50919050565b606060003385858560405160200161135d9493929190615045565b6040516020818303038152906040528051906020012090506000606a6000838152602001908152602001600020805461139590614fbd565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190614fbd565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b509396505050505050505b9392505050565b61142861175d565b6001600160a01b03811661148d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610641565b610a90816117b7565b60408051600080825260208201909252606091908161077b565b60408051808201909152606080825260208201528152602001906001900390816114b05790505092915050565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b60006115d5836000015160008151811061156857611568615078565b602002602001015160018460006008611581919061543f565b61158c90600461543f565b61159790600861543f565b6115a290600461543f565b6115ad90601061543f565b6115b890601861543f565b6115c390602061543f565b6115cd919061543f565b60ff16611d67565b60011490505b92915050565b60006115d583600001516000815181106115fd576115fd615078565b602002602001015160018460006008611616919061543f565b61162190600461543f565b61162c90600861543f565b61163790600461543f565b61164290601061543f565b61164d90601861543f565b6115b890602061543f565b6000611665826002611d86565b905060005b815181101561175557600061169f61169a84848151811061168d5761168d615078565b6020026020010151611dca565b611e47565b905060006116cf846116b2856001615464565b815181106116c2576116c2615078565b602002602001015161196e565b6040805133602082015263ffffffff8b169181019190915261ffff808a1660608301528816608082015260a0810184905290915060009060c00160408051808303601f190181529181528151602092830120600090815260699092529020805460ff191660ff93909316929092179091555061174e9050600282615464565b905061166a565b505050505050565b6033546001600160a01b031633146109805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610641565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118305760405162461bcd60e51b81526004016106419061547c565b610980611e63565b606554611848576301312d006065555b5a606555565b6118566137d1565b604051634b3dfd0160e01b815273__$9adf670328df3ee79279acdb5eff580adf$__90634b3dfd019061188d908690600401615598565b60006040518083038186803b1580156118a557600080fd5b505af41580156118b9573d6000803e3d6000fd5b509395945050505050565b60606115db8230611e93565b60006115db8260a001516010600060086118ea9190615464565b611d67565b60006115db8260a001516010600060086119099190615464565b6118ea906010615464565b61191c6137f7565b61194b8361192b84600161543f565b60ff168151811061193e5761193e615078565b6020026020010151611f46565b60028151811061195d5761195d615078565b602002602001015190509392505050565b80516000901580159061198357508151602110155b61198c57600080fd5b6000806119988461204f565b8151919350915060208210156104985760208290036101000a9004949350505050565b6119c36137d1565b60006119cf8584612096565b905060006119dd86836124b6565b905060005b81518161ffff1610156118b9576000808860600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b91906151ea565b6001600160a01b0316632c34025e8a606001516101000151611a908c606001516118d0565b611a9d8d606001516129b0565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015261ffff909116602483015260ff16604482015260640160006040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b29919081019061590d565b91509150600073__$9adf670328df3ee79279acdb5eff580adf$__630d08d16883600001518c606001516101400151611b658e606001516129d5565b886040518563ffffffff1660e01b8152600401611b859493929190615b22565b60206040518083038186803b158015611b9d57600080fd5b505af4158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd59190615c2e565b9050611be2816001615464565b9050611c2b8a85878761ffff1681518110611bff57611bff615078565b6020026020010151898861ffff1681518110611c1d57611c1d615078565b602002602001015185612a10565b50505080611c3890615c47565b90506119e2565b611cc982600001600081548110611c5857611c58615078565b90600052602060002001546001808460006008611c75919061543f565b611c8090600461543f565b611c8b90600861543f565b611c9690600461543f565b611ca190601061543f565b611cac90601861543f565b611cb790602061543f565b611cc1919061543f565b60ff16612b5e565b82600001600081548110611cdf57611cdf615078565b6000918252602090912001555050565b611cc982600001600081548110611d0857611d08615078565b90600052602060002001546001808460006008611d25919061543f565b611d3090600461543f565b611d3b90600861543f565b611d4690600461543f565b611d5190601061543f565b611d5c90601861543f565b611cac90602061543f565b91821c91600080611d7b600180861b615c69565b909416949350505050565b60606000611d9b611d9685612b83565b611f46565b9050610498611db8828560ff168151811061193e5761193e615078565b60028151811061193e5761193e615078565b8051606090611dd857600080fd5b600080611de48461204f565b915091506000816001600160401b03811115611e0257611e026138e9565b6040519080825280601f01601f191660200182016040528015611e2c576020820181803683370190505b50905060208101611e3e848285612ba9565b50949350505050565b6000815160001415611e5b57506000919050565b506020015190565b600054610100900460ff16611e8a5760405162461bcd60e51b81526004016106419061547c565b610980336117b7565b60606000611ea8611d96856101600151612b83565b905060005b8151811015611f3b576000611eef611ed084848151811061193e5761193e615078565b600081518110611ee257611ee2615078565b6020026020010151612c28565b9050846001600160a01b0316816001600160a01b03161415611f2a57611f2083838151811061193e5761193e615078565b93505050506115db565b50611f34816150a4565b9050611ead565b506060949350505050565b6060611f5182612c42565b611f5a57600080fd5b6000611f6583612c7b565b90506000816001600160401b03811115611f8157611f816138e9565b604051908082528060200260200182016040528015611fba57816020015b611fa76137f7565b815260200190600190039081611f9f5790505b5090506000611fcc8560200151612cfe565b8560200151611fdb9190615464565b90506000805b8481101561204457611ff283612d79565b915060405180604001604052808381526020018481525084828151811061201b5761201b615078565b60209081029190910101526120308284615464565b92508061203c816150a4565b915050611fe1565b509195945050505050565b60008060006120618460200151612cfe565b905060008185602001516120759190615464565b905060008286600001516120899190615c69565b9196919550909350505050565b606060006120a784606001516129d5565b60ff166001600160401b038111156120c1576120c16138e9565b6040519080825280602002602001820160405280156120ea578160200160208202803683370190505b50905060005b6120fd85606001516129d5565b60ff168110156124ae57600182828151811061211b5761211b615078565b602090810291909101015260ff8416606414156122545760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561217557600080fd5b505afa158015612189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ad91906151ea565b6060870151610100810151906121c2906118d0565b6121cf89606001516118ef565b6040516020016121e294939291906150bf565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b03169061222182600883611d67565b905060ff81166001141561225057600085858151811061224357612243615078565b6020026020010181815250505b5050505b600082828151811061226857612268615078565b6020026020010151111561249e57600060676040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516122af9190614ff2565b908152604051908190036020019020546001600160a01b03166352456227836001600160401b038111156122e5576122e56138e9565b6040519080825280601f01601f19166020018201604052801561230f576020820181803683370190505b5060608901516020810151610100820151909161232b906118d0565b6123388c606001516118ef565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b168152612370989796959493929190600401615c80565b602060405180830381600087803b15801561238a57600080fd5b505af115801561239e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c29190615c2e565b905060018114156124215760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b6064820152608401610641565b60028114156124725760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f74207265616368006044820152606401610641565b61247e61271082615ce8565b83838151811061249057612490615078565b602002602001018181525050505b6124a7816150a4565b90506120f0565b509392505050565b606060008360600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124fb57600080fd5b505afa15801561250f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253391906151ea565b6001600160a01b03166305cce54f8560600151610100015161255887606001516118ef565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b15801561259e57600080fd5b505afa1580156125b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125da9190810190615d0a565b905060006125eb85606001516129d5565b60ff166001600160401b03811115612605576126056138e9565b60405190808252806020026020018201604052801561262e578160200160208202803683370190505b509050600061264086606001516129d5565b60ff166001600160401b0381111561265a5761265a6138e9565b604051908082528060200260200182016040528015612683578160200160208202803683370190505b509050600061269587606001516129d5565b60ff166001600160401b038111156126af576126af6138e9565b6040519080825280602002602001820160405280156126d8578160200160208202803683370190505b50905060005b84518110156129a45760005b6126f789606001516129d5565b60ff168110156129935760008960600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561274457600080fd5b505afa158015612758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277c91906151ea565b60608b015161010081015190612791906118ef565b8986815181106127a3576127a3615078565b60200260200101516040516020016127be9493929190615045565b6040516020818303038152906040528051906020012090506000606a600083815260200190815260200160002080546127f690614fbd565b80601f016020809104026020016040519081016040528092919081815260200182805461282290614fbd565b801561286f5780601f106128445761010080835404028352916020019161286f565b820191906000526020600020905b81548152906001019060200180831161285257829003601f168201915b505050505090506000612883826000612e1d565b90508088858151811061289857612898615078565b602002602001018181516128ac9190615d98565b61ffff169052508a518b90859081106128c7576128c7615078565b60200260200101518885815181106128e1576128e1615078565b602002602001015161ffff1610158015612915575085848151811061290857612908615078565b6020908102919091010151155b1561297f5788858151811061292c5761292c615078565b602002602001015187858151811061294657612946615078565b602002602001019060ff16908160ff1681525050600186858151811061296e5761296e615078565b911515602092830291909101909101525b5050508061298c906150a4565b90506126ea565b5061299d816150a4565b90506126de565b50909695505050505050565b60006115db8260a001516008600060086129ca9190615464565b611909906010615464565b60006115db8260a001516010600060086129ef9190615464565b6129fa906010615464565b612a05906010615464565b6118ea906008615464565b6000612a1a612e5b565b60ff851660408201526060870151909150612a34906129b0565b60ff1681526001602082015260c081018390526060860151612a5590612ea2565b63ffffffff1660a08201526001610120820181905260408051828152808201909152906020808301908036833750505061014082015260408051600180825281830190925290602080830190803683375050506101608201526101408101518051839190600090612ac857612ac8615078565b602002602001018181525050612aea6040518060200160405280606081525090565b612af48183612edd565b6000612b26338960600151602001518a6060015161010001518b602001518c6060015160c001518d600001518d6114dd565b6000818152606b602090815260409091208451805193945085939192612b5192849290910190613811565b5050505050505050505050565b600083821b8183612b72600180881b615c69565b901b19969096161795945050505050565b612b8b6137f7565b50604080518082019091528151815260209182019181019190915290565b80612bb357505050565b60208110612beb5782518252612bca602084615464565b9250612bd7602083615464565b9150612be4602082615c69565b9050612bb3565b8015610efd5760006001612c00836020615c69565b612c0c90610100615ea2565b612c169190615c69565b84518451821691191617835250505050565b8051600090601514612c3957600080fd5b6115db8261196e565b8051600090612c5357506000919050565b6020820151805160001a9060c0821015612c71575060009392505050565b5060019392505050565b8051600090612c8c57506000919050565b600080612c9c8460200151612cfe565b8460200151612cab9190615464565b9050600084600001518560200151612cc39190615464565b90505b80821015612cf557612cd782612d79565b612ce19083615464565b915082612ced816150a4565b935050612cc6565b50909392505050565b8051600090811a6080811015612d175750600092915050565b60b8811080612d32575060c08110801590612d32575060f881105b15612d405750600192915050565b60c0811015612d6d57612d55600160b8615eae565b612d629060ff1682615c69565b611419906001615464565b612d55600160f8615eae565b80516000908190811a6080811015612d94576001915061077b565b60b8811015612dba57612da8608082615c69565b612db3906001615464565b915061077b565b60c0811015612de75760b78103600185019450806020036101000a8551046001820181019350505061077b565b60f8811015612dfb57612da860c082615c69565b60019390930151602084900360f7016101000a900490920160f5190192915050565b600080612e2c611d9685612b83565b9050610498612e49828560ff168151811061193e5761193e615078565b6002815181106116c2576116c2615078565b612e6361384b565b612e6b61384b565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60006115db8260a00151602060006008612ebc9190615464565b612ec7906010615464565b612ed2906010615464565b611909906008615464565b60c081015160019015612ef85780612ef4816150a4565b9150505b8160e0015161271014612f135780612f0f816150a4565b9150505b81610100015161271014612f2f5780612f2b816150a4565b9150505b61014082015151151580612f4857506101608201515115155b80612f5857506101a08201515115155b15612fca576000826101600151518361014001515111612f9d57826101a00151518361016001515111612f9157826101a0015151612fa5565b82610160015151612fa5565b826101400151515b9050612fb2816004615ed1565b612fbc9083615464565b60ff90911661012084015290505b806001600160401b03811115612fe257612fe26138e9565b60405190808252806020026020018201604052801561300b578160200160208202803683370190505b508352815161301b90849061346e565b6130298383602001516134c6565b6130378383606001516134ff565b61304583836040015161354e565b61305483836101200151613592565b60008060019050836080015162ffffff16612710146130895761307b858560800151613623565b613086600183615d98565b91505b8360a0015163ffffffff16612710146130b8576130aa858560a0015161368a565b6130b5600283615d98565b91505b60c0840151156130fe5760c08401518551826130d3816150a4565b9350815181106130e5576130e5615078565b60209081029190910101526130fb600483615d98565b91505b8360e00151612710146131475760e084015185518261311c816150a4565b93508151811061312e5761312e615078565b6020908102919091010152613144600883615d98565b91505b8361010001516127101461319257610100840151855182613167816150a4565b93508151811061317957613179615078565b602090810291909101015261318f601083615d98565b91505b61012084015160ff161561345d5760005b84610120015160ff1681101561344e576000856101400151511180156131ce57508461014001515181105b156132255784610140015181815181106131ea576131ea615078565b602002602001015186600001518380613202906150a4565b94508151811061321457613214615078565b602002602001018181525050613253565b855160009083613234816150a4565b94508151811061324657613246615078565b6020026020010181815250505b60008561016001515111801561326e57508461016001515181105b156132c557846101600151818151811061328a5761328a615078565b6020026020010151866000015183806132a2906150a4565b9450815181106132b4576132b4615078565b6020026020010181815250506132f3565b8551600090836132d4816150a4565b9450815181106132e6576132e6615078565b6020026020010181815250505b60008561018001515111801561330e57508461018001515181105b1561336857846101800151818151811061332a5761332a615078565b602002602001015160ff1686600001518380613345906150a4565b94508151811061335757613357615078565b602002602001018181525050613395565b8551819083613376816150a4565b94508151811061338857613388615078565b6020026020010181815250505b6000856101a00151511180156133b05750846101a001515181105b1561341057846101a0015181815181106133cc576133cc615078565b60200260200101516001600160a01b0316866000015183806133ed906150a4565b9450815181106133ff576133ff615078565b60200260200101818152505061343e565b85516000908361341f816150a4565b94508151811061343157613431615078565b6020026020010181815250505b613447816150a4565b90506131a3565b5061345a602083615d98565b91505b61346785836136fd565b5050505050565b6134a3826000015160008151811061348857613488615078565b60200260200101518260ff16600860ff16600060ff16612b5e565b825180516000906134b6576134b6615078565b6020026020010181815250505050565b6134a382600001516000815181106134e0576134e0615078565b60200260200101518260ff16600460ff1660006008611cc1919061543f565b6134a3826000015160008151811061351957613519615078565b60200260200101518260ff16600460ff1660006008613538919061543f565b61354390600461543f565b611cc190600861543f565b6134a3826000015160008151811061356857613568615078565b60200260200101518260ff16600860ff1660006008613587919061543f565b611cc190600461543f565b6134a382600001516000815181106135ac576135ac615078565b60200260200101518260ff16600860ff16600060086135cb919061543f565b6135d690600461543f565b6135e190600861543f565b6135ec90600461543f565b6135f790601061543f565b61360290601861543f565b61360d90602061543f565b61361890602061543f565b611cc190602061543f565b6134a3826000015160008151811061363d5761363d615078565b60200260200101518262ffffff16601860ff166000600861365e919061543f565b61366990600461543f565b61367490600861543f565b61367f90600461543f565b611cc190601061543f565b6134a382600001516000815181106136a4576136a4615078565b60200260200101518263ffffffff16602060ff16600060086136c6919061543f565b6136d190600461543f565b6136dc90600861543f565b6136e790600461543f565b6136f290601061543f565b611cc190601861543f565b6134a3826000015160008151811061371757613717615078565b60200260200101518261ffff16601060ff1660006008613737919061543f565b61374290600461543f565b61358790600861543f565b82805461375990614fbd565b90600052602060002090601f01602090048101928261377b57600085556137c1565b82601f1061379457805160ff19168380011785556137c1565b828001600101855582156137c1579182015b828111156137c15782518255916020019190600101906137a6565b506137cd9291506138d4565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156137c157916020028201828111156137c15782518255916020019190600101906137a6565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156137cd57600081556001016138d5565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613922576139226138e9565b60405290565b60405160a081016001600160401b0381118282101715613922576139226138e9565b604080519081016001600160401b0381118282101715613922576139226138e9565b604051608081016001600160401b0381118282101715613922576139226138e9565b60405161018081016001600160401b0381118282101715613922576139226138e9565b604051606081016001600160401b0381118282101715613922576139226138e9565b60405161016081016001600160401b0381118282101715613922576139226138e9565b604051601f8201601f191681016001600160401b0381118282101715613a1e57613a1e6138e9565b604052919050565b6001600160a01b0381168114610a9057600080fd5b8035613a4681613a26565b919050565b803563ffffffff81168114613a4657600080fd5b60ff81168114610a9057600080fd5b8035613a4681613a5f565b803561ffff81168114613a4657600080fd5b60006101408284031215613a9e57600080fd5b613aa66138ff565b613aaf83613a3b565b8152613abd60208401613a3b565b6020820152613ace60408401613a3b565b6040820152613adf60608401613a4b565b6060820152613af060808401613a4b565b6080820152613b0160a08401613a3b565b60a0820152613b1260c08401613a6e565b60c0820152613b2360e08401613a79565b60e0820152610100613b36818501613a6e565b90820152610120613b48848201613a6e565b908201529392505050565b60006001600160401b03821115613b6c57613b6c6138e9565b50601f01601f191660200190565b600082601f830112613b8b57600080fd5b8135613b9e613b9982613b53565b6139f6565b818152846020838601011115613bb357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613bed57600080fd5b8835613bf881613a26565b97506020890135613c0881613a26565b96506040890135613c1881613a26565b9550613c2660608a01613a4b565b94506080890135613c3681613a26565b9350613c4460a08a01613a4b565b925060c08901356001600160401b03811115613c5f57600080fd5b613c6b8b828c01613b7a565b925050613c7a60e08a01613a79565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613cce5783518252928401926001929092019190840190613cae565b509695505050505050565b60005b83811015613cf4578181015183820152602001613cdc565b83811115613d03576000848401525b50505050565b60008151808452613d21816020860160208601613cd9565b601f01601f19169290920160200192915050565b6020815260006114196020830184613d09565b600060208284031215613d5a57600080fd5b5035919050565b60008060008060008060c08789031215613d7a57600080fd5b8635613d8581613a26565b95506020870135613d9581613a26565b9450613da360408801613a4b565b93506060870135613db381613a26565b9250613dc160808801613a4b565b9150613dcf60a08801613a79565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b818110156129a45783516001600160a01b031683529284019291840191600101613e04565b60008060008060808587031215613e3f57600080fd5b613e4885613a4b565b9350613e5660208601613a79565b92506040850135613e6681613a5f565b915060608501356001600160401b03811115613e8157600080fd5b613e8d87828801613b7a565b91505092959194509250565b60006001600160401b03821115613eb257613eb26138e9565b5060051b60200190565b60006020808385031215613ecf57600080fd5b82356001600160401b0380821115613ee657600080fd5b818501915085601f830112613efa57600080fd5b8135613f08613b9982613e99565b81815260059190911b83018401908481019088831115613f2757600080fd5b8585015b83811015613f5f57803585811115613f435760008081fd5b613f518b89838a0101613b7a565b845250918601918601613f2b565b5098975050505050505050565b600080600080600060a08688031215613f8457600080fd5b613f8d86613a4b565b9450613f9b60208701613a79565b9350613fa960408701613a79565b92506060860135613fb981613a5f565b915060808601356001600160401b03811115613fd457600080fd5b613fe088828901613b7a565b9150509295509295909350565b600082601f830112613ffe57600080fd5b8135602061400e613b9983613e99565b82815260059290921b8401810191818101908684111561402d57600080fd5b8286015b84811015613cce5780356001600160401b038082111561405057600080fd5b9088019060a0828b03601f1901121561406857600080fd5b614070613928565b8683013561407d81613a5f565b815260408381013561408e81613a26565b828901526060848101358284015260808501359083015260a0840135838111156140b85760008081fd5b8085019450508b603f8501126140d057600092508283fd5b8784013592506140e2613b9984613e99565b83815260069390931b8401810192888101908d8511156141025760008081fd5b948201945b848610156141595782868f03121561411f5760008081fd5b61412761394a565b61413087613a4b565b81528a8701358060040b81146141465760008081fd5b818c015282529482019490890190614107565b6080840152505085525050918301918301614031565b60006080828403121561418157600080fd5b61418961396c565b9050813561419681613a26565b815260208201356141a681613a5f565b602082015260408201356001600160401b03808211156141c557600080fd5b6141d185838601613b7a565b604084015260608401359150808211156141ea57600080fd5b506141f784828501613b7a565b60608301525092915050565b6000806040838503121561421657600080fd5b82356001600160401b038082111561422d57600080fd5b9084019060a0828703121561424157600080fd5b614249613928565b823561425481613a26565b8152602083013561426481613a26565b6020820152604083013561427781613a26565b604082015260608301358281111561428e57600080fd5b830161018081890312156142a157600080fd5b6142a961398e565b6142b282613a3b565b81526142c060208301613a3b565b60208201526142d160408301613a3b565b60408201526142e260608301613a3b565b60608201526080820135608082015260a082013560a082015261430760c08301613a4b565b60c082015261431860e08301613a4b565b60e082015261010061432b818401613a4b565b9082015261012061433d838201613a6e565b90820152610140828101358581111561435557600080fd5b6143618b828601613fed565b828401525050610160808301358581111561437b57600080fd5b6143878b828601613b7a565b82840152505080606084015250506143a160808401613a6e565b6080820152935060208501359150808211156143bc57600080fd5b506143c98582860161416f565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261440e60a0840182613d09565b90506060840151601f1984830301608085015261442b8282613d09565b95945050505050565b600082601f83011261444557600080fd5b81356020614455613b9983613e99565b82815260059290921b8401810191818101908684111561447457600080fd5b8286015b84811015613cce5780358352918301918301614478565b600082601f8301126144a057600080fd5b813560206144b0613b9983613e99565b82815260059290921b840181019181810190868411156144cf57600080fd5b8286015b84811015613cce5780356144e681613a26565b83529183019183016144d3565b600082601f83011261450457600080fd5b81356020614514613b9983613e99565b82815260059290921b8401810191818101908684111561453357600080fd5b8286015b84811015613cce5780356001600160401b038082111561455657600080fd5b90880190601f196080838c038201121561456f57600080fd5b61457761396c565b878401358381111561458857600080fd5b84016060818e038401121561459c57600080fd5b6145a46139b1565b9250888101356145b381613a5f565b83526040818101356145c481613a26565b848b01526060820135858111156145da57600080fd5b6145e88f8c83860101614434565b82860152508383526145fb818701613a6e565b8a840152606086013593508484111561461357600080fd5b6146218e8b8689010161448f565b9083015250608084013591508282111561463a57600080fd5b6146488c8984870101614434565b60608201528652505050918301918301614537565b600082601f83011261466e57600080fd5b8135602061467e613b9983613e99565b82815260059290921b8401810191818101908684111561469d57600080fd5b8286015b84811015613cce5780356001600160401b038111156146c05760008081fd5b6146ce8986838b0101613b7a565b8452509183019183016146a1565b600082601f8301126146ed57600080fd5b813560206146fd613b9983613e99565b82815260059290921b8401810191818101908684111561471c57600080fd5b8286015b84811015613cce5780356001600160401b03808211156147405760008081fd5b9088019060a0828b03601f190181131561475a5760008081fd5b614762613928565b87840135838111156147745760008081fd5b6147828d8a838801016144f3565b8252506040614792818601613a6e565b8983015260606147a3818701613a3b565b828401526080915081860135858111156147bd5760008081fd5b6147cb8f8c838a010161448f565b828501525050828501359250838311156147e55760008081fd5b6147f38d8a8588010161465d565b908201528652505050918301918301614720565b600082601f83011261481857600080fd5b81356020614828613b9983613e99565b82815260059290921b8401810191818101908684111561484757600080fd5b8286015b84811015613cce57803561485e81613a5f565b835291830191830161484b565b80356001600160401b0381168114613a4657600080fd5b600082601f83011261489357600080fd5b813560206148a3613b9983613e99565b82815260059290921b840181019181810190868411156148c257600080fd5b8286015b84811015613cce5780356001600160401b03808211156148e65760008081fd5b90880190610160828b03601f19018113156149015760008081fd5b6149096139d3565b614914888501613a79565b81526040614923818601613a79565b898301526060614934818701613a6e565b8284015260809150614947828701613a4b565b9083015260a0614958868201613a6e565b8284015260c0915061496b828701613a4b565b9083015260e061497c868201613a4b565b82840152610100915061499082870161486b565b9083015261012085810135858111156149a95760008081fd5b6149b78f8c838a010161448f565b8385015250610140915081860135858111156149d35760008081fd5b6149e18f8c838a010161465d565b8285015250506149f2838601613a3b565b9082015286525050509183019183016148c6565b600082601f830112614a1757600080fd5b81356020614a27613b9983613e99565b82815260059290921b84018101918181019086841115614a4657600080fd5b8286015b84811015613cce5780356001600160401b0380821115614a6a5760008081fd5b9088019060a0828b03601f1901811315614a845760008081fd5b614a8c613928565b614a97888501613a4b565b815260408085013584811115614aad5760008081fd5b614abb8e8b83890101613b7a565b8a8401525060608086013585811115614ad45760008081fd5b614ae28f8c838a0101613b7a565b8385015250608091508186013585811115614afd5760008081fd5b614b0b8f8c838a0101613b7a565b828501525050614b1c838601613a6e565b908201528652505050918301918301614a4a565b60008060408385031215614b4357600080fd5b614b4c83613a4b565b915060208301356001600160401b0380821115614b6857600080fd5b908401906101608287031215614b7d57600080fd5b614b856139d3565b823582811115614b9457600080fd5b614ba0888286016146dc565b825250602083013582811115614bb557600080fd5b614bc188828601614807565b602083015250604083013582811115614bd957600080fd5b614be588828601614882565b604083015250606083013582811115614bfd57600080fd5b614c0988828601614a06565b606083015250608083013582811115614c2157600080fd5b614c2d88828601614807565b60808301525060a083013582811115614c4557600080fd5b614c518882860161448f565b60a08301525060c083013582811115614c6957600080fd5b614c758882860161448f565b60c083015250614c8760e08401613a4b565b60e0820152610100614c9a818501613a4b565b90820152610120614cac848201613a6e565b908201526101408381013583811115614cc457600080fd5b614cd089828701613b7a565b8284015250508093505050509250929050565b600060208284031215614cf557600080fd5b81356001600160401b0380821115614d0c57600080fd5b908301906101608286031215614d2157600080fd5b614d296139d3565b614d3283613a3b565b8152614d4060208401613a3b565b6020820152614d5160408401613a4b565b6040820152614d6260608401613a79565b6060820152614d7360808401613a79565b6080820152614d8460a08401613a6e565b60a0820152614d9560c08401613a3b565b60c0820152614da660e08401613a4b565b60e0820152610100614db9818501613a3b565b90820152610120614dcb848201613a6e565b908201526101408381013583811115614de357600080fd5b614def88828701613b7a565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614e5557603f19888603018452614e43858351613d09565b94509285019290850190600101614e27565b5092979650505050505050565b600060208284031215614e7457600080fd5b81356001600160401b03811115614e8a57600080fd5b6104988482850161448f565b600080600060608486031215614eab57600080fd5b614eb484613a4b565b9250614ec260208501613a79565b91506040840135614ed281613a5f565b809150509250925092565b600060208284031215614eef57600080fd5b813561141981613a26565b600081518084526020808501945080840160005b83811015614f2d57815160ff1687529582019590820190600101614f0e565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614faf57888303603f1901855281518051878552614f8388860182614efa565b91890151858303868b0152919050614f9b8183614efa565b968901969450505090860190600101614f5f565b509098975050505050505050565b600181811c90821680614fd157607f821691505b6020821081141561133c57634e487b7160e01b600052602260045260246000fd5b60008251615004818460208701613cd9565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156150b8576150b861508e565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b038616815263ffffffff8516602082015261ffff84811660408301528316606082015260a06080820181905260009061513490830184613d09565b979650505050505050565b60006020828403121561515157600080fd5b81516001600160801b038116811461141957600080fd5b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b80518015158114613a4657600080fd5b6000602082840312156151d657600080fd5b611419826151b4565b8051613a4681613a26565b6000602082840312156151fc57600080fd5b815161141981613a26565b60408152615219604082018451613ddb565b6000602084015161522d6060840182613ddb565b50604084015163ffffffff8116608084015250606084015161ffff811660a084015250608084015161ffff811660c08401525060a084015160ff811660e08401525060c084015161010061528381850183613ddb565b60e0860151915061012061529e8186018463ffffffff169052565b908601519150610140906152b485830184613ddb565b86015191506101606152ca8582018460ff169052565b8187015192508061018086015250506152e76101a0840182613d09565b91505061141960208301846001600160801b03169052565b600061530d613b9984613b53565b905082815283838301111561532157600080fd5b611419836020830184613cd9565b600082601f83011261534057600080fd5b81516020615350613b9983613e99565b82815260059290921b8401810191818101908684111561536f57600080fd5b8286015b84811015613cce5780516001600160401b038111156153925760008081fd5b8701603f810189136153a45760008081fd5b6153b58986830151604084016152ff565b845250918301918301615373565b6000602082840312156153d557600080fd5b81516001600160401b038111156153eb57600080fd5b6104988482850161532f565b60006020828403121561540957600080fd5b81516001600160401b0381111561541f57600080fd5b8201601f8101841361543057600080fd5b610498848251602084016152ff565b600060ff821660ff84168060ff0382111561545c5761545c61508e565b019392505050565b600082198211156154775761547761508e565b500190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081518084526020808501808196508360051b810191508286016000805b8681101561558a578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015615574578451805163ffffffff1685528b015160040b8b850152938a01939281019260019290920191615542565b5050509a87019a955050918501916001016154e6565b509298975050505050505050565b60208152600060018060a01b0380845116602084015280602085015116604084015280604085015116606084015250606083015160a060808401526155e160c084018251613ddb565b60208101516155f360e0850182613ddb565b50604081015161010061560881860183613ddb565b6060830151915061012061561e81870184613ddb565b60808401519250610140838188015260a08501519350610160848189015260c08601519450610180615657818a018763ffffffff169052565b60e087015163ffffffff9081166101a08b015285880151166101c08a01528387015160ff166101e08a0152828701516102008a0191909152945061569f6102408901866154c7565b95015187860360bf19016102208901529493506156c29250839150849050613d09565b91505060808401516124ae60a085018260ff169052565b8051613a4681613a5f565b600082601f8301126156f557600080fd5b81516020615705613b9983613e99565b82815260059290921b8401810191818101908684111561572457600080fd5b8286015b84811015613cce5780518352918301918301615728565b600082601f83011261575057600080fd5b81516020615760613b9983613e99565b82815260059290921b8401810191818101908684111561577f57600080fd5b8286015b84811015613cce57805161579681613a26565b8352918301918301615783565b600082601f8301126157b457600080fd5b815160206157c4613b9983613e99565b82815260059290921b840181019181810190868411156157e357600080fd5b8286015b84811015613cce5780516001600160401b038082111561580657600080fd5b90880190601f196080838c038201121561581f57600080fd5b61582761396c565b878401518381111561583857600080fd5b84016060818e038401121561584c57600080fd5b6158546139b1565b92508881015161586381613a5f565b835260408181015161587481613a26565b848b015260608201518581111561588a57600080fd5b6158988f8c838601016156e4565b82860152508383526158ab8187016156d9565b8a84015260608601519350848411156158c357600080fd5b6158d18e8b8689010161573f565b908301525060808401519150828211156158ea57600080fd5b6158f88c89848701016156e4565b606082015286525050509183019183016157e7565b6000806040838503121561592057600080fd5b615929836151b4565b915060208301516001600160401b038082111561594557600080fd5b9084019060a0828703121561595957600080fd5b615961613928565b82518281111561597057600080fd5b61597c888286016157a3565b82525061598b602084016156d9565b602082015261599c604084016151df565b60408201526060830151828111156159b357600080fd5b6159bf8882860161573f565b6060830152506080830151828111156159d757600080fd5b6159e38882860161532f565b6080830152508093505050509250929050565b600081518084526020808501945080840160005b83811015614f2d57815187529582019590820190600101615a0a565b600081518084526020808501945080840160005b83811015614f2d5781516001600160a01b031687529582019590820190600101615a3a565b600081518084526020808501808196508360051b810191508286016000805b8681101561558a578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015615b0c578451805163ffffffff1685528b015160040b8b850152938a01939281019260019290920191615ada565b5050509a87019a95505091850191600101615a7e565b6000608080830181845280885180835260a092508286019150828160051b8701016020808c0160005b84811015615bf657898403609f1901865281518051898652805160ff168a870152848101516001600160a01b031689870152604090810151606060c08801819052909190615b9c60e08901846159f6565b925086840151615bb0888a018260ff169052565b5081840151888403838a0152615bc68482615a26565b935050808401519350878303818901525050615be281836159f6565b978501979550505090820190600101615b4b565b505087820390880152615c09818b615a5f565b95505050505050615c1f604083018560ff169052565b61ffff8316606083015261442b565b600060208284031215615c4057600080fd5b5051919050565b600061ffff80831681811415615c5f57615c5f61508e565b6001019392505050565b600082821015615c7b57615c7b61508e565b500390565b6000610100808352615c948184018c613d09565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b600082615d0557634e487b7160e01b600052601260045260246000fd5b500690565b60006020808385031215615d1d57600080fd5b82516001600160401b03811115615d3357600080fd5b8301601f81018513615d4457600080fd5b8051615d52613b9982613e99565b81815260059190911b82018301908381019087831115615d7157600080fd5b928401925b82841015615134578351615d8981613a5f565b82529284019290840190615d76565b600061ffff808316818516808303821115615db557615db561508e565b01949350505050565b600181815b80851115615df9578160001904821115615ddf57615ddf61508e565b80851615615dec57918102915b93841c9390800290615dc3565b509250929050565b600082615e10575060016115db565b81615e1d575060006115db565b8160018114615e335760028114615e3d57615e59565b60019150506115db565b60ff841115615e4e57615e4e61508e565b50506001821b6115db565b5060208310610133831016604e8410600b8410161715615e7c575081810a6115db565b615e868383615dbe565b8060001904821115615e9a57615e9a61508e565b029392505050565b60006114198383615e01565b600060ff821660ff841680821015615ec857615ec861508e565b90039392505050565b6000816000190483118215151615615eeb57615eeb61508e565b50029056fea26469706673582212207525d6d060c27c57c782c4671c47af1b1ab2f8a1516e21cb14e8c07592d8d10c64736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/handler/AllocateLayerHandlerLib.sol": {
      "AllocateLayerHandlerLib": [
        {
          "length": 20,
          "start": 2152
        },
        {
          "length": 20,
          "start": 4091
        },
        {
          "length": 20,
          "start": 6278
        },
        {
          "length": 20,
          "start": 6994
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/handler/AllocateLayerHandlerLib.sol": {
      "AllocateLayerHandlerLib": [
        {
          "length": 20,
          "start": 2119
        },
        {
          "length": 20,
          "start": 4058
        },
        {
          "length": 20,
          "start": 6245
        },
        {
          "length": 20,
          "start": 6961
        }
      ]
    }
  }
}
