{
  "_format": "hh-sol-artifact-1",
  "contractName": "WitnetOracleTrustableReef",
  "sourceName": "contracts/core/customs/WitnetOracleTrustableReef.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract WitnetRequestFactory",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "contract WitnetRequestBytecodes",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_upgradable",
          "type": "bool"
        },
        {
          "internalType": "bytes32",
          "name": "_versionTag",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultWithCallbackGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultWithCallbackRevertGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_sstoreFromZeroGas",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "EmptyBuffer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "range",
          "type": "uint256"
        }
      ],
      "name": "IndexOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "InvalidLengthEncoding",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "read",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        }
      ],
      "name": "UnexpectedMajorType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "unexpected",
          "type": "uint256"
        }
      ],
      "name": "UnsupportedMajorType",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "queryId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "BatchReportError",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Received",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "reporters",
          "type": "address[]"
        }
      ],
      "name": "ReportersSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "reporters",
          "type": "address[]"
        }
      ],
      "name": "ReportersUnset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "baseAddr",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "baseCodehash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "versionTag",
          "type": "string"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmReward",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "indexed": false,
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "witnetSLA",
          "type": "tuple"
        }
      ],
      "name": "WitnetQuery",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryResponse",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmCallbackGas",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryResponseDelivered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "resultCborBytes",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmCallbackActualGas",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "evmCallbackRevertReason",
          "type": "string"
        }
      ],
      "name": "WitnetQueryResponseDeliveryFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmReward",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryRewardUpgraded",
      "type": "event"
    },
    {
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "base",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "channel",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "class",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "codehash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_codehash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "_resultMaxSize",
          "type": "uint16"
        }
      ],
      "name": "estimateBaseFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "radHash",
          "type": "bytes32"
        }
      ],
      "name": "estimateBaseFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint24",
          "name": "_callbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "estimateBaseFeeWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_witnetQueryIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txGasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nanoWitPrice",
          "type": "uint256"
        }
      ],
      "name": "estimateReportEarnings",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_revenues",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_expenses",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_queryIds",
          "type": "uint256[]"
        }
      ],
      "name": "extractWitnetDataRequests",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "_bytecodes",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "contract WitnetRequestFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "fetchQueryResponse",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "reporter",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "finality",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "resultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "resultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "resultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct WitnetV2.Response",
          "name": "_response",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNextQueryId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQuery",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "requester",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "gasCallback",
                  "type": "uint24"
                },
                {
                  "internalType": "uint72",
                  "name": "evmReward",
                  "type": "uint72"
                },
                {
                  "internalType": "bytes",
                  "name": "witnetBytecode",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "witnetRAD",
                  "type": "bytes32"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "committeeSize",
                      "type": "uint8"
                    },
                    {
                      "internalType": "uint64",
                      "name": "witnessingFeeNanoWit",
                      "type": "uint64"
                    }
                  ],
                  "internalType": "struct WitnetV2.RadonSLA",
                  "name": "witnetSLA",
                  "type": "tuple"
                }
              ],
              "internalType": "struct WitnetV2.Request",
              "name": "request",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "reporter",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "finality",
                  "type": "uint64"
                },
                {
                  "internalType": "uint32",
                  "name": "resultTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "bytes32",
                  "name": "resultTallyHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "resultCborBytes",
                  "type": "bytes"
                }
              ],
              "internalType": "struct WitnetV2.Response",
              "name": "response",
              "type": "tuple"
            }
          ],
          "internalType": "struct WitnetV2.Query",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryEvmReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryRequest",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "requester",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "gasCallback",
              "type": "uint24"
            },
            {
              "internalType": "uint72",
              "name": "evmReward",
              "type": "uint72"
            },
            {
              "internalType": "bytes",
              "name": "witnetBytecode",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "witnetRAD",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "committeeSize",
                  "type": "uint8"
                },
                {
                  "internalType": "uint64",
                  "name": "witnessingFeeNanoWit",
                  "type": "uint64"
                }
              ],
              "internalType": "struct WitnetV2.RadonSLA",
              "name": "witnetSLA",
              "type": "tuple"
            }
          ],
          "internalType": "struct WitnetV2.Request",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResponse",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "reporter",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "finality",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "resultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "resultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "resultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct WitnetV2.Response",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResponseStatus",
      "outputs": [
        {
          "internalType": "enum WitnetV2.ResponseStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResultCborBytes",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResultError",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum Witnet.ResultErrorCodes",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "reason",
              "type": "string"
            }
          ],
          "internalType": "struct Witnet.ResultError",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryStatus",
      "outputs": [
        {
          "internalType": "enum WitnetV2.QueryStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_witnetQueryIds",
          "type": "uint256[]"
        }
      ],
      "name": "getQueryStatusBatch",
      "outputs": [
        {
          "internalType": "enum WitnetV2.QueryStatus[]",
          "name": "_status",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_reporter",
          "type": "address"
        }
      ],
      "name": "isReporter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUpgradable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        }
      ],
      "name": "isUpgradableFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_queryRAD",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        }
      ],
      "name": "postRequest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_queryUnverifiedBytecode",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        },
        {
          "internalType": "uint24",
          "name": "_queryCallbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "postRequestWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_queryRAD",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        },
        {
          "internalType": "uint24",
          "name": "_queryCallbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "postRequestWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract WitnetRequestBytecodes",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_witnetQueryResultTallyHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_witnetQueryResultCborBytes",
          "type": "bytes"
        }
      ],
      "name": "reportResult",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_witnetQueryResultTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_witnetQueryResultTallyHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_witnetQueryResultCborBytes",
          "type": "bytes"
        }
      ],
      "name": "reportResult",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "queryId",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "queryResultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "queryResultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "queryResultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct IWitnetOracleReporter.BatchResult[]",
          "name": "_batchResults",
          "type": "tuple[]"
        }
      ],
      "name": "reportResultBatch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_batchReward",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_reporters",
          "type": "address[]"
        }
      ],
      "name": "setReporters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "specs",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_exReporters",
          "type": "address[]"
        }
      ],
      "name": "unsetReporters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "upgradeQueryEvmReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610240604052336101005263baeca88b60e01b6101605234801561002257600080fd5b50604051615c6d380380615c6d833981016040819052610041916101b6565b87878787878787878787878760008083836040518060400160405280601981526020017f696f2e7769746e65742e70726f786961626c652e626f61726400000000000000815250823360006001600160a01b0316816001600160a01b0316036100c457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100cd81610135565b5030608052151560c052600160025560e091909152805160209091012061012052506001600160a01b03908116610140529485166101a05250505016610180526101c0939093526101e0919091526102005261022052506102389a5050505050505050505050565b600180546001600160a01b031916905561014e81610151565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461014e57600080fd5b600080600080600080600080610100898b0312156101d357600080fd5b88516101de816101a1565b60208a01519098506101ef816101a1565b60408a0151909750801515811461020557600080fd5b60608a015160808b015160a08c015160c08d015160e0909d01519b9e9a9d50929b919a9099929850909650945092505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615928610345600039600081816129c901526131ad015260006129f5015260008181612a350152612a7d015260006131d7015260008181610903015281816116b6015281816116fe015281816117c901526118860152600081816106c50152818161185c01528181611a140152611f4401526000610870015260006109a00152600061052e0152600061094e01526000611aa001526000818161055f0152611c5f015260005050600081816104e401528181610839015281816115eb015281816116450152818161194c015261196e01526159286000f3fe6080604052600436106102765760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610970578063e5a6b10f1461098e578063e900aa33146109c2578063ec5946db146109d5578063f2fde38b146109e8578063f61921b214610a08576102b3565b8063aeb2ffc114610892578063b207e730146108bf578063bff852fa146108df578063c45a0155146108f4578063c805dd0f14610927578063d5f394881461093c576102b3565b806393d5185c1161011357806393d5185c146107955780639cc56e67146107ca578063a3ff5b00146107ea578063a77fc1a4146107fd578063a9e954b91461082a578063adb7c3f71461085e576102b3565b80637b103999146106b35780637bbdb96e146106e75780637bd88218146107375780638d3d8b38146107575780638da5cb5b14610777576102b3565b80635001f3b5116101e85780636280bce8116101ac5780636280bce8146105d25780636b58960a146105f25780636f07abcc146106125780636fdaab7e1461063f578063715018a61461068957806379ba50971461069e576102b3565b80635001f3b5146104d557806352d1902d1461051c5780635479d9401461055057806354fd4d5014610583578063581f5094146105a5576102b3565b8063234fe6e31161023a578063234fe6e31461040857806328a78d9b146104355780633dc2b7a214610455578063439fab911461046857806345ea6c17146104885780634c9f72e3146104b5576102b3565b8063044ad7be1461032b57806305e742ef1461036057806306eb2c421461038e57806308b7e85e146103ae5780630aa4112a146103db576102b3565b366102b3576102b1604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a28565b005b3480156102bf57600080fd5b506102b16102d160003560f81c610a71565b6102e260ff60003560f01c16610a71565b6102f360ff60003560e81c16610a71565b61030460ff60003560e01c16610a71565b604051602001610317949392919061430b565b604051602081830303815290604052610a28565b34801561033757600080fd5b5061034b61034636600461439f565b610b63565b60405190151581526020015b60405180910390f35b34801561036c57600080fd5b5061038061037b3660046143cf565b610ba5565b604051908152602001610357565b34801561039a57600080fd5b506103806103a9366004614446565b610bb9565b3480156103ba57600080fd5b506103ce6103c9366004614487565b610f23565b6040516103579190614520565b3480156103e757600080fd5b506103fb6103f6366004614487565b6111ba565b60405161035791906145b5565b34801561041457600080fd5b50610428610423366004614487565b611320565b60405161035791906145f2565b34801561044157600080fd5b506102b1610450366004614665565b61132b565b61038061046336600461471b565b6113e4565b34801561047457600080fd5b506102b1610483366004614766565b6114ef565b34801561049457600080fd5b506104a86104a3366004614446565b6119e3565b60405161035791906147eb565b3480156104c157600080fd5b506102b16104d0366004614665565b611a85565b3480156104e157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610357565b34801561052857600080fd5b506103807f000000000000000000000000000000000000000000000000000000000000000081565b34801561055c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034b565b34801561058f57600080fd5b50610598611a99565b604051610357919061484f565b3480156105b157600080fd5b506105c56105c0366004614446565b611ac9565b6040516103579190614872565b3480156105de57600080fd5b506103806105ed3660046148fe565b611b8b565b3480156105fe57600080fd5b5061034b61060d36600461439f565b611c5b565b34801561061e57600080fd5b5061063261062d366004614487565b611cb1565b6040516103579190614950565b34801561064b57600080fd5b5061038061065a366004614487565b60009081526000805160206158d38339815191526020526040902054600160b81b90046001600160481b031690565b34801561069557600080fd5b506102b1611cbc565b3480156106aa57600080fd5b506102b1611cd0565b3480156106bf57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f357600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610357565b34801561074357600080fd5b5061038061075236600461496e565b611d47565b34801561076357600080fd5b50610598610772366004614487565b611d54565b34801561078357600080fd5b506000546001600160a01b0316610504565b3480156107a157600080fd5b506107b56107b036600461499e565b611df2565b60408051928352602083019190915201610357565b3480156107d657600080fd5b506103806107e5366004614a1b565b611f21565b6103806107f8366004614a3d565b611ff7565b34801561080957600080fd5b5061081d610818366004614487565b612152565b6040516103579190614ab2565b34801561083657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f610380565b34801561086a57600080fd5b5061071e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561089e57600080fd5b506108b26108ad366004614487565b6122cb565b6040516103579190614ade565b3480156108cb57600080fd5b506103806108da366004614b2b565b612501565b3480156108eb57600080fd5b5061059861261c565b34801561090057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610504565b34801561093357600080fd5b50610380612653565b34801561094857600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b34801561097c57600080fd5b506001546001600160a01b0316610504565b34801561099a57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b6103806109d0366004614b92565b612670565b6102b16109e3366004614487565b612730565b3480156109f457600080fd5b506102b1610a0336600461439f565b61282e565b348015610a1457600080fd5b506103ce610a23366004614487565b61289f565b610a3061261c565b81604051602001610a42929190614bcf565b60408051601f198184030181529082905262461bcd60e51b8252610a689160040161484f565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610aa3601085614c38565b610aae906030614c5a565b90506000610abd601086614c73565b610ac8906030614c5a565b905060398260ff161115610ae457610ae1600783614c5a565b91505b60398160ff161115610afe57610afb600782614c5a565b90505b8160f81b83600081518110610b1557610b15614c95565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b4357610b43614c95565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b6000610bb26001836129c1565b9392505050565b6000610c1b6000805160206158b38339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff1690612aab565b60005b82811015610f12576001610c55858584818110610c3d57610c3d614c95565b9050602002810190610c4f9190614cab565b35612abd565b6003811115610c6657610c666145c8565b14610d4b577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610c9e57610c9e614c95565b9050602002810190610cb09190614cab565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610ceb90600190600401614950565b600060405180830381865af4158015610d08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d309190810190614d1a565b604051610d3e929190614d4e565b60405180910390a1610f0a565b838382818110610d5d57610d5d614c95565b9050602002810190610d6f9190614cab565b610d80906040810190602001614d67565b63ffffffff161580610dc35750838382818110610d9f57610d9f614c95565b9050602002810190610db19190614cab565b610dbf906060810190614d82565b1590505b15610e41577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610dfb57610dfb614c95565b9050602002810190610e0d9190614cab565b35610e1661261c565b604051602001610e269190614dc8565b60408051601f1981840301815290829052610d3e9291614d4e565b610efd848483818110610e5657610e56614c95565b9050602002810190610e689190614cab565b35858584818110610e7b57610e7b614c95565b9050602002810190610e8d9190614cab565b610e9e906040810190602001614d67565b868685818110610eb057610eb0614c95565b9050602002810190610ec29190614cab565b60400135878786818110610ed857610ed8614c95565b9050602002810190610eea9190614cab565b610ef8906060810190614d82565b612b3e565b610f079083614e01565b91505b600101610c1e565b508015610b9f57610b9f3382612d20565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915281600380610f5d83612abd565b6003811115610f6e57610f6e6145c8565b14610ffd576040516353e8875160e11b8152610ff89073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b600060405180830381865af4158015610fcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ff39190810190614d1a565b610a28565b6111b3565b8361104661100a82612d56565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b03909116331490612aab565b61104f85612d56565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff169282019290925260058301546060820152600690920180546080840191906110b490614e14565b80601f01602080910402602001604051908101604052809291908181526020018280546110e090614e14565b801561112d5780601f106111025761010080835404028352916020019161112d565b820191906000526020600020905b81548152906001019060200180831161111057829003601f168201915b505050505081525050935061114d6000805160206158b383398151915290565b60008681526001918201602052604081208181559182908290611172908301826141cf565b506000600282018190556003909101805468ffffffffffffffffff191690556004830181815560058401829055906111ad60068501826141cf565b50505050505b5050919050565b6111fe6040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b61120782612d56565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061125f90614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461128b90614e14565b80156112d85780601f106112ad576101008083540402835291602001916112d8565b820191906000526020600020905b8154815290600101906020018083116112bb57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610b9f82612d74565b611333612e8c565b60005b81518110156113a957600082828151811061135357611353614c95565b6020026020010151905060006113746000805160206158b383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101611336565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516113d99190614e48565b60405180910390a150565b60006113f1600184611f21565b61142a81345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b815250612aab565b61146861143882600a614e89565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b815250612aab565b8261149e61147582612eb9565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b815250612aab565b6114aa85856000612f12565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168334866040516114df93929190614ec4565b60405180910390a1505092915050565b6000546001600160a01b0316606081611542576060838060200190518101906115189190614f0b565b909350905061152683612fe6565b8080602001905181019061153a9190614f5b565b91505061159c565b611585826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b815250612aab565b828060200190518101906115999190614f5b565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe541580159061160d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b15611643576116436040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a28565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b60208201526116e7907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b151590612aab565b6117ba630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190614ff4565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b815250612aab565b611941306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611849919061501e565b6001600160a01b031614801561191157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611906919061501e565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b815250612aab565b61194a81612fff565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66119c9611a99565b6040516119d6919061484f565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611a40907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161503b565b600060405180830381865af4158015611a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bb29190810190615085565b611a8d612e8c565b611a9681612fff565b50565b6060611ac47f00000000000000000000000000000000000000000000000000000000000000006130a5565b905090565b6060816001600160401b03811115611ae357611ae3614600565b604051908082528060200260200182016040528015611b0c578160200160208202803683370190505b50905060005b82811015611b8457611b3b848483818110611b2f57611b2f614c95565b90506020020135612abd565b828281518110611b4d57611b4d614c95565b60200260200101906003811115611b6657611b666145c8565b90816003811115611b7957611b796145c8565b905250600101611b12565b5092915050565b6000611ba46000805160206158b3833981519152610bce565b84600180611bb183612abd565b6003811115611bc257611bc26145c8565b14611c07576040516353e8875160e11b8152611c029073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b611c51565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611c419085151590612aab565b611c4e8742888888613149565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610b9f5750816001600160a01b0316611ca16000546001600160a01b031690565b6001600160a01b03161492915050565b6000610b9f82612abd565b611cc4612e8c565b611cce6000612fe6565b565b60015433906001600160a01b03168114611d3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a68565b611a9681612fe6565b6000610bb260018361316d565b6060611d5f82613205565b6002018054611d6d90614e14565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9990614e14565b8015611de65780601f10611dbb57610100808354040283529160200191611de6565b820191906000526020600020905b815481529060010190602001808311611dc957829003601f168201915b50505050509050919050565b60008060005b87811015611f15576001611e178a8a84818110611b2f57611b2f614c95565b6003811115611e2857611e286145c8565b03611f0d576000611e508a8a84818110611e4457611e44614c95565b90506020020135612d56565b8054909150611e6f90600160b81b90046001600160481b031685614e01565b8154909450600160a01b900462ffffff1615611eaf578054611e9e908790600160a01b900462ffffff16610ba5565b611ea89084614e01565b9250611edf565b600281015415611ec757611e9e868260020154611f21565b611ed2866000611d47565b611edc9084614e01565b92505b84611eec82600301613226565b6001600160401b0316611eff9190614e89565b611f099084614e01565b9250505b600101611df8565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf9190615140565b9050611fe560008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b815250612aab565b611fef8482611d47565b949350505050565b600033826120b1823b1580159061207257506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612072919061515d565b8015612083575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b815250612aab565b6120bd60015b85610ba5565b6120c781346113f7565b6120d561143882600a614e89565b856120e261147582612eb9565b6120ee60008888612f12565b945088886120fb87612d56565b6001019161210a9190836151cf565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161213e93929190614ec4565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152600061217283612d74565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b84628261219886613205565b6002016040518363ffffffff1660e01b81526004016121b892919061528f565b600060405180830381865af49250505080156121f657506040513d6000823e601f3d908101601f191682016040526121f3919081019061532e565b60015b610bb2576122026153c7565b806308c379a00361225e57506122166153e3565b806122215750612260565b60408051808201909152806000815260200182604051602001612244919061546c565b60408051601f198184030181529190529052949350505050565b505b3d80801561228a576040519150601f19603f3d011682016040523d82523d6000602084013e61228f565b606091505b50604080518082019091528060008152602001604051806060016040528060218152602001615892602191399052949350505050565b50919050565b6122d3614209565b60008281526000805160206158d383398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a08501919061234e90614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461237a90614e14565b80156123c75780601f1061239c576101008083540402835291602001916123c7565b820191906000526020600020905b8154815290600101906020018083116123aa57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff16928101929092526005850154606083015260068501805494909301939192909160808401919061247590614e14565b80601f01602080910402602001604051908101604052809291908181526020018280546124a190614e14565b80156124ee5780601f106124c3576101008083540402835291602001916124ee565b820191906000526020600020905b8154815290600101906020018083116124d157829003601f168201915b5050509190925250505090525092915050565b600061251a6000805160206158b3833981519152610bce565b8560018061252783612abd565b6003811115612538576125386145c8565b1461257d576040516353e8875160e11b81526125789073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b612611565b6125c760008863ffffffff1611801561259c5750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b815250612aab565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526126019085151590612aab565b61260e8888888888613149565b92505b505095945050505050565b60408051808201909152601981527f5769746e65744f7261636c65547275737461626c655265656600000000000000602082015290565b60006000805160206158b383398151915254611ac4906001614e01565b600033826126ae823b1580159061207257506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e5690602401612031565b6126b860016120b7565b6126c281346113f7565b6126d061143882600a614e89565b856126dd61147582612eb9565b6126e8888888612f12565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161271d93929190614ec4565b60405180910390a1505050509392505050565b8060018061273d83612abd565b600381111561274e5761274e6145c8565b14612793576040516353e8875160e11b815261278e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b505050565b600061279e84612d56565b905034815482906017906127c3908490600160b81b90046001600160481b03166154a5565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b612836612e8c565b600180546001600160a01b0383166001600160a01b031990911681179091556128676000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6040805160a08101825260008082526020820181905291810182905260608082019290925260808101919091526128d582613205565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff16918101919091526001820154606082015260028201805491929160808401919061293890614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461296490614e14565b80156129b15780601f10612986576101008083540402835291602001916129b1565b820191906000526020600020905b81548152906001019060200180831161299457829003601f168201915b5050505050815250509050919050565b6000806129ef7f00000000000000000000000000000000000000000000000000000000000000006003614e89565b612a19907f0000000000000000000000000000000000000000000000000000000000000000614e01565b9050808362ffffff161080612a5b575080612a5962ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614e01565b105b15612a7257612a6a8185614e89565b915050610b9f565b612aa162ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614e01565b612a6a9085614e89565b81612ab957612ab981610a28565b5050565b60008181526000805160206158d3833981519152602052604081206004810154600160e01b900463ffffffff1615612b1c576004810154600160a01b90046001600160401b03164310612b135750600392915050565b50600292915050565b80546001600160a01b031615612b355750600192915050565b50600092915050565b600080612b4a87612d56565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff1615612c9857805460009081908190612bb9908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613256565b9250925092508115612c0a57604080518b81526001602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612c75565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88886001876000875111612c585760405180606001604052806029815260200161586960299139612c5a565b865b604051612c6c969594939291906154c5565b60405180910390a15b612c908a8a8a604051806020016040528060008152506135ec565b505050612d16565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c2778760016040805192835260208301919091520160405180910390a1612d1687878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561278e573d6000803e3d6000fd5b60009081526000805160206158d38339815191526020526040902090565b600080612d8083612abd565b90506003816003811115612d9657612d966145c8565b03612e485760008381526000805160206158d38339815191526020526040812060060180549091908290612dc990614e14565b90501115612e3e578054601b60fb1b908290600090612de790614e14565b8110612df557612df5614c95565b815460011615612e145790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612e34576002611fef565b6003949350505050565b5060059392505050565b6001816003811115612e5c57612e5c6145c8565b03612e6a5750600192915050565b6002816003811115612e7e57612e7e6145c8565b03612b355750600492915050565b6000546001600160a01b03163314611cce5760405163118cdaa760e01b8152336004820152602401610a68565b600080612ecc6040840160208501615522565b6001600160401b0316118015612ef157506000612eec602084018461553f565b60ff16115b8015610b9f5750607f612f07602084018461553f565b60ff16111592915050565b60006000805160206158b38339815191528054600090612f319061555c565b918290555090506000612f4382612d56565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b6020820152919250612f83916001600160a01b039091161590612aab565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b0316178155600281018590558360038201612fdb8282615575565b905050509392505050565b600180546001600160a01b0319169055611a96816136b9565b60005b815181101561307557600082828151811061301f5761301f614c95565b6020026020010151905060016130406000805160206158b383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101613002565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516113d99190614e48565b606060006130b283613709565b6001600160401b038111156130c9576130c9614600565b6040519080825280601f01601f1916602001820160405280156130f3576020820181803683370190505b50905060005b8151811015611b845783816020811061311457613114614c95565b1a60f81b82828151811061312a5761312a614c95565b60200101906001600160f81b031916908160001a9053506001016130f9565b60006131588686868686612b3e565b90506131643382612d20565b95945050505050565b6000602061ffff83161561318b576131866001846155c5565b61318e565b60005b61319891906155e0565b6131a3906004615601565b6131d19061ffff167f0000000000000000000000000000000000000000000000000000000000000000614e89565b6131fb907f0000000000000000000000000000000000000000000000000000000000000000614e01565b610bb29084614e89565b60009081526000805160206158d38339815191526020526040902060040190565b80546000906132399060ff166003614c5a565b8254610b9f9160ff169061010090046001600160401b031661561c565b60008060605a9250601b60fb1b878760008161327457613274614c95565b9050013560f81c60f81b6001600160f81b031916036134c45760006132d66132d189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b61376c565b90506002815110156133fd57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b815260040161338a969594939291906156c8565b600060405180830381600088803b1580156133a457600080fd5b5087f1935050505080156133b6575060015b6133f4576133c26153c7565b806308c379a0036133e857506133d66153e3565b806133e157506133ea565b91506134be565b505b3d6000803e3d6000fd5b600192506134be565b856001600160a01b03166363febc9c868d8d8d436134348860008151811061342757613427614c95565b602002602001015161391c565b60fe811115613445576134456145c8565b8860008151811061345857613458614c95565b60200260200101516040518863ffffffff1660e01b8152600401613481969594939291906156c8565b600060405180830381600088803b15801561349b57600080fd5b5087f1935050505080156134ad575060015b6134b9576133c26153c7565b600192505b506135d2565b846001600160a01b031663bcc6307b858c8c8c436135178e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b6040518763ffffffff1660e01b8152600401613537959493929190615715565b600060405180830381600088803b15801561355157600080fd5b5087f193505050508015613563575060015b6135cd5761356f6153c7565b806308c379a00361359557506135836153e3565b8061358e5750613597565b90506135d2565b505b3d8080156135c1576040519150601f19603f3d011682016040523d82523d6000602084013e6135c6565b606091505b50506135d2565b600191505b5a6135dd9084615749565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061363485612d56565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136b0908261575c565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137425781816020811061372757613727614c95565b1a60f81b6001600160f81b031916156137425760010161370c565b919050565b61374f61428b565b6040805180820190915282815260006020820152610bb28161397f565b60608160048060ff16826040015160ff16146137ac57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b60006137c085600001518660600151613a9f565b90506137cd81600161581b565b6001600160401b03166001600160401b038111156137ed576137ed614600565b60405190808252806020026020018201604052801561382657816020015b61381361428b565b81526020019060019003908161380b5790505b50935060005b816001600160401b03168110156138ec5761384686613b67565b955061385186613b8f565b85828151811061386357613863614c95565b6020026020010181905250600460ff16866040015160ff16036138bc57600061388b8761376c565b9050806001825161389c9190615749565b815181106138ac576138ac614c95565b60200260200101519650506138e4565b600560ff16866040015160ff16036138d957600061388b87613c27565b6138e286613e11565b505b60010161382c565b508484826001600160401b03168151811061390957613909614c95565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461395c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b61396e84600001518560600151613a9f565b6001600160401b0316949350505050565b61398761428b565b81515182906000036139ac576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a2f576139cc89613fd6565b9550816139d88161555c565b6007600589901c169650601f881695509250506005198501613a27576020890151613a038a86613a9f565b9350808a60200151613a159190615749565b613a1f9084614e01565b9250506139bd565b5060006139bd565b600760ff86161115613a595760405163bd2ac87960e01b815260ff86166004820152602401610a68565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ab7575060ff8116610b9f565b8160ff16601803613ad557613acb83613fd6565b60ff169050610b9f565b8160ff16601903613af457613ae983614038565b61ffff169050610b9f565b8160ff16601a03613b1557613b08836140a4565b63ffffffff169050610b9f565b8160ff16601b03613b3057613b2983614103565b9050610b9f565b8160ff16601f03613b4957506001600160401b03610b9f565b604051636d785b1360e01b815260ff83166004820152602401610a68565b613b6f61428b565b81518051516020909101511015613b8b578151610b9f9061397f565b5090565b613b9761428b565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c6757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b6000613c7b85600001518660600151613a9f565b613c8690600261561c565b9050613c9381600161581b565b6001600160401b03166001600160401b03811115613cb357613cb3614600565b604051908082528060200260200182016040528015613cec57816020015b613cd961428b565b815260200190600190039081613cd15790505b50935060005b816001600160401b03168110156138ec57613d0c86613b67565b9550613d1786613b8f565b858281518110613d2957613d29614c95565b6020908102919091010152613d3f60028261583b565b158015613d545750604086015160ff16600314155b15613d8257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a68565b604086015160ff1660041480613d9f5750604086015160ff166005145b15613dfe57604086015160009060ff16600414613dc457613dbf87613c27565b613dcd565b613dcd8761376c565b90508060018251613dde9190615749565b81518110613dee57613dee614c95565b6020026020010151965050613e09565b613e0786613e11565b505b600101613cf2565b613e1961428b565b604082015160ff161580613e345750604082015160ff166001145b80613e6d5750604082015160ff166007148015613e5957506019826060015160ff1610155b8015613e6d5750601b826060015160ff1611155b15613ea057613e7b82614162565b6001600160401b03168260000151602001818151613e999190614e01565b9052505090565b604082015160ff1660031480613ebd5750604082015160ff166002145b15613f01576000613ed683600001518460600151613a9f565b9050806001600160401b03168360000151602001818151613ef79190614e01565b905250613b8b9050565b604082015160ff1660041480613f1e5750604082015160ff166005145b15613f4757613f3582600001518360600151613a9f565b6001600160401b031660808301525090565b604082015160ff166007141580613f795750816060015160ff16601414158015613f795750816060015160ff16601514155b15613b8b5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a68565b600081602001518260000151518082111561400e576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b835160208501805180830160010151955090819061402b8261555c565b8152505050505050919050565b60008160200151600261404b9190614e01565b82515180821115614079576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516002818401810151965090916140978284614e01565b9052509395945050505050565b6000816020015160046140b79190614e01565b825151808211156140e5576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516004818401810151965090916140978284614e01565b6000816020015160086141169190614e01565b82515180821115614144576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516008818401810151965090916140978284614e01565b60006018826060015160ff16101561417c57506000919050565b601c826060015160ff1610156141ab576018826060015161419d919061584f565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a68565b5080546141db90614e14565b6000825580601f106141eb575050565b601f016020900490600052602060002090810190611a9691906142d2565b60405180604001604052806142586040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526040805160a08101825260008082526020828101829052928201819052606080830191909152608082015291015290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613b8b57600081556001016142d3565b60005b838110156143025781810151838201526020016142ea565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614339816013850160208a016142e7565b855190830190614350816013840160208a016142e7565b85519101906143668160138401602089016142e7565b845191019061437c8160138401602088016142e7565b016013019695505050505050565b6001600160a01b0381168114611a9657600080fd5b6000602082840312156143b157600080fd5b8135610bb28161438a565b803562ffffff8116811461374257600080fd5b600080604083850312156143e257600080fd5b823591506143f2602084016143bc565b90509250929050565b60008083601f84011261440d57600080fd5b5081356001600160401b0381111561442457600080fd5b6020830191508360208260051b850101111561443f57600080fd5b9250929050565b6000806020838503121561445957600080fd5b82356001600160401b0381111561446f57600080fd5b61447b858286016143fb565b90969095509350505050565b60006020828403121561449957600080fd5b5035919050565b600081518084526144b88160208601602086016142e7565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a06080850152611fef60a08501826144a0565b602081526000610bb260208301846144cc565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261457c60e08501826144a0565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000610bb26020830184614533565b634e487b7160e01b600052602160045260246000fd5b600681106145ee576145ee6145c8565b9052565b60208101610b9f82846145de565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561463b5761463b614600565b6040525050565b60006001600160401b0382111561465b5761465b614600565b5060051b60200190565b6000602080838503121561467857600080fd5b82356001600160401b0381111561468e57600080fd5b8301601f8101851361469f57600080fd5b80356146aa81614642565b6040516146b78282614616565b82815260059290921b83018401918481019150878311156146d757600080fd5b928401925b828410156146fe5783356146ef8161438a565b825292840192908401906146dc565b979650505050505050565b6000604082840312156122c557600080fd5b6000806060838503121561472e57600080fd5b823591506143f28460208501614709565b60006001600160401b0382111561475857614758614600565b50601f01601f191660200190565b60006020828403121561477857600080fd5b81356001600160401b0381111561478e57600080fd5b8201601f8101841361479f57600080fd5b80356147aa8161473f565b6040516147b78282614616565b8281528660208486010111156147cc57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561484257603f198886030184526148308583516144a0565b94509285019290850190600101614814565b5092979650505050505050565b602081526000610bb260208301846144a0565b600481106145ee576145ee6145c8565b6020808252825182820181905260009190848201906040850190845b818110156148b1576148a1838551614862565b928401929184019160010161488e565b50909695505050505050565b60008083601f8401126148cf57600080fd5b5081356001600160401b038111156148e657600080fd5b60208301915083602082850101111561443f57600080fd5b6000806000806060858703121561491457600080fd5b843593506020850135925060408501356001600160401b0381111561493857600080fd5b614944878288016148bd565b95989497509550505050565b60208101610b9f8284614862565b61ffff81168114611a9657600080fd5b6000806040838503121561498157600080fd5b8235915060208301356149938161495e565b809150509250929050565b600080600080600080608087890312156149b757600080fd5b86356001600160401b03808211156149ce57600080fd5b6149da8a838b016143fb565b909850965060208901359150808211156149f357600080fd5b50614a0089828a016148bd565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a2e57600080fd5b50508035926020909101359150565b60008060008060808587031215614a5357600080fd5b84356001600160401b03811115614a6957600080fd5b614a75878288016148bd565b9095509350614a8990508660208701614709565b9150614a97606086016143bc565b905092959194509250565b60ff81106145ee576145ee6145c8565b60208152614ac4602082018351614aa2565b60006020830151604080840152611fef60608401826144a0565b602081526000825160406020840152614afa6060840182614533565b90506020840151601f1984830301604085015261316482826144cc565b803563ffffffff8116811461374257600080fd5b600080600080600060808688031215614b4357600080fd5b85359450614b5360208701614b17565b93506040860135925060608601356001600160401b03811115614b7557600080fd5b614b81888289016148bd565b969995985093965092949392505050565b600080600060808486031215614ba757600080fd5b83359250614bb88560208601614709565b9150614bc6606085016143bc565b90509250925092565b60008351614be18184602088016142e7565b6101d160f51b9083019081528351614c008160028401602088016142e7565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c4b57614c4b614c0c565b8060ff84160491505092915050565b60ff8181168382160190811115610b9f57610b9f614c22565b600060ff831680614c8657614c86614c0c565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b60008235607e19833603018112614cc157600080fd5b9190910192915050565b600082601f830112614cdc57600080fd5b8151614ce78161473f565b604051614cf48282614616565b828152856020848701011115614d0957600080fd5b6131648360208301602088016142e7565b600060208284031215614d2c57600080fd5b81516001600160401b03811115614d4257600080fd5b611fef84828501614ccb565b828152604060208201526000611fef60408301846144a0565b600060208284031215614d7957600080fd5b610bb282614b17565b6000808335601e19843603018112614d9957600080fd5b8301803591506001600160401b03821115614db357600080fd5b60200191503681900382131561443f57600080fd5b60008251614dda8184602087016142e7565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b80820180821115610b9f57610b9f614c22565b600181811c90821680614e2857607f821691505b6020821081036122c557634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148b15783516001600160a01b031683529284019291840191600101614e64565b8082028115828204841417610b9f57610b9f614c22565b60ff81168114611a9657600080fd5b6001600160401b0381168114611a9657600080fd5b83815260208101839052608081018235614edd81614ea0565b60ff1660408301526020830135614ef381614eaf565b6001600160401b038116606084015250949350505050565b60008060408385031215614f1e57600080fd5b8251614f298161438a565b60208401519092506001600160401b03811115614f4557600080fd5b614f5185828601614ccb565b9150509250929050565b60006020808385031215614f6e57600080fd5b82516001600160401b03811115614f8457600080fd5b8301601f81018513614f9557600080fd5b8051614fa081614642565b604051614fad8282614616565b82815260059290921b8301840191848101915087831115614fcd57600080fd5b928401925b828410156146fe578351614fe58161438a565b82529284019290840190614fd2565b60006020828403121561500657600080fd5b81516001600160e01b031981168114610bb257600080fd5b60006020828403121561503057600080fd5b8151610bb28161438a565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561506b57600080fd5b8260051b8085606085013791909101606001949350505050565b6000602080838503121561509857600080fd5b82516001600160401b03808211156150af57600080fd5b818501915085601f8301126150c357600080fd5b81516150ce81614642565b6040516150db8282614616565b82815260059290921b84018501918581019150888311156150fb57600080fd5b8585015b83811015615133578051858111156151175760008081fd5b6151258b89838a0101614ccb565b8452509186019186016150ff565b5098975050505050505050565b60006020828403121561515257600080fd5b8151610bb28161495e565b60006020828403121561516f57600080fd5b81518015158114610bb257600080fd5b601f82111561278e576000816000526020600020601f850160051c810160208610156151a85750805b601f850160051c820191505b818110156151c7578281556001016151b4565b505050505050565b6001600160401b038311156151e6576151e6614600565b6151fa836151f48354614e14565b8361517f565b6000601f84116001811461522e57600085156152165750838201355b600019600387901b1c1916600186901b178355615288565b600083815260209020601f19861690835b8281101561525f578685013582556020948501946001909201910161523f565b508682101561527c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b61529981846145de565b6000602060406020840152600084546152b181614e14565b80604087015260606001808416600081146152d357600181146152ef5761531f565b60ff19851660608a0152606084151560051b8a0101955061531f565b89600052602060002060005b858110156153165781548b82018601529083019088016152fb565b8a016060019650505b50939998505050505050505050565b60006020828403121561534057600080fd5b81516001600160401b038082111561535757600080fd5b908301906040828603121561536b57600080fd5b60405160408101818110838211171561538657615386614600565b604052825160ff811061539857600080fd5b81526020830151828111156153ac57600080fd5b6153b887828601614ccb565b60208301525095945050505050565b600060033d11156153e05760046000803e5060005160e01c5b90565b600060443d10156153f15790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561542057505050505090565b82850191508151818111156154385750505050505090565b843d87010160208285010111156154525750505050505090565b61546160208286010187614616565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b8152600082516154988160118501602087016142e7565b9190910160110192915050565b6001600160481b03818116838216019080821115611b8457611b84614c22565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261551560c08201856144a0565b9998505050505050505050565b60006020828403121561553457600080fd5b8135610bb281614eaf565b60006020828403121561555157600080fd5b8135610bb281614ea0565b60006001820161556e5761556e614c22565b5060010190565b813561558081614ea0565b60ff8116905081548160ff198216178355602084013561559f81614eaf565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b61ffff828116828216039080821115611b8457611b84614c22565b600061ffff808416806155f5576155f5614c0c565b92169190910492915050565b61ffff818116838216019080821115611b8457611b84614c22565b6001600160401b0381811683821602808216919082811461563f5761563f614c22565b505092915050565b6000815160c084528051604060c08601526156666101008601826144a0565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526156f36080820184614aa2565b60c060a0820152600061570960c0830184615647565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a0608082015260006146fe60a0830184615647565b81810381811115610b9f57610b9f614c22565b81516001600160401b0381111561577557615775614600565b615789816157838454614e14565b8461517f565b602080601f8311600181146157be57600084156157a65750858301515b600019600386901b1c1916600185901b1785556151c7565b600085815260208120601f198616915b828110156157ed578886015182559484019460019091019084016157ce565b508582101561580b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115611b8457611b84614c22565b60008261584a5761584a614c0c565b500690565b60ff8281168282160390811115610b9f57610b9f614c2256fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220c4e54c07aa8148e91ac97f484a8b7dece10f8e97a94f404ab8d96b382e6997e864736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106102765760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610970578063e5a6b10f1461098e578063e900aa33146109c2578063ec5946db146109d5578063f2fde38b146109e8578063f61921b214610a08576102b3565b8063aeb2ffc114610892578063b207e730146108bf578063bff852fa146108df578063c45a0155146108f4578063c805dd0f14610927578063d5f394881461093c576102b3565b806393d5185c1161011357806393d5185c146107955780639cc56e67146107ca578063a3ff5b00146107ea578063a77fc1a4146107fd578063a9e954b91461082a578063adb7c3f71461085e576102b3565b80637b103999146106b35780637bbdb96e146106e75780637bd88218146107375780638d3d8b38146107575780638da5cb5b14610777576102b3565b80635001f3b5116101e85780636280bce8116101ac5780636280bce8146105d25780636b58960a146105f25780636f07abcc146106125780636fdaab7e1461063f578063715018a61461068957806379ba50971461069e576102b3565b80635001f3b5146104d557806352d1902d1461051c5780635479d9401461055057806354fd4d5014610583578063581f5094146105a5576102b3565b8063234fe6e31161023a578063234fe6e31461040857806328a78d9b146104355780633dc2b7a214610455578063439fab911461046857806345ea6c17146104885780634c9f72e3146104b5576102b3565b8063044ad7be1461032b57806305e742ef1461036057806306eb2c421461038e57806308b7e85e146103ae5780630aa4112a146103db576102b3565b366102b3576102b1604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a28565b005b3480156102bf57600080fd5b506102b16102d160003560f81c610a71565b6102e260ff60003560f01c16610a71565b6102f360ff60003560e81c16610a71565b61030460ff60003560e01c16610a71565b604051602001610317949392919061430b565b604051602081830303815290604052610a28565b34801561033757600080fd5b5061034b61034636600461439f565b610b63565b60405190151581526020015b60405180910390f35b34801561036c57600080fd5b5061038061037b3660046143cf565b610ba5565b604051908152602001610357565b34801561039a57600080fd5b506103806103a9366004614446565b610bb9565b3480156103ba57600080fd5b506103ce6103c9366004614487565b610f23565b6040516103579190614520565b3480156103e757600080fd5b506103fb6103f6366004614487565b6111ba565b60405161035791906145b5565b34801561041457600080fd5b50610428610423366004614487565b611320565b60405161035791906145f2565b34801561044157600080fd5b506102b1610450366004614665565b61132b565b61038061046336600461471b565b6113e4565b34801561047457600080fd5b506102b1610483366004614766565b6114ef565b34801561049457600080fd5b506104a86104a3366004614446565b6119e3565b60405161035791906147eb565b3480156104c157600080fd5b506102b16104d0366004614665565b611a85565b3480156104e157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610357565b34801561052857600080fd5b506103807f000000000000000000000000000000000000000000000000000000000000000081565b34801561055c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034b565b34801561058f57600080fd5b50610598611a99565b604051610357919061484f565b3480156105b157600080fd5b506105c56105c0366004614446565b611ac9565b6040516103579190614872565b3480156105de57600080fd5b506103806105ed3660046148fe565b611b8b565b3480156105fe57600080fd5b5061034b61060d36600461439f565b611c5b565b34801561061e57600080fd5b5061063261062d366004614487565b611cb1565b6040516103579190614950565b34801561064b57600080fd5b5061038061065a366004614487565b60009081526000805160206158d38339815191526020526040902054600160b81b90046001600160481b031690565b34801561069557600080fd5b506102b1611cbc565b3480156106aa57600080fd5b506102b1611cd0565b3480156106bf57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f357600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610357565b34801561074357600080fd5b5061038061075236600461496e565b611d47565b34801561076357600080fd5b50610598610772366004614487565b611d54565b34801561078357600080fd5b506000546001600160a01b0316610504565b3480156107a157600080fd5b506107b56107b036600461499e565b611df2565b60408051928352602083019190915201610357565b3480156107d657600080fd5b506103806107e5366004614a1b565b611f21565b6103806107f8366004614a3d565b611ff7565b34801561080957600080fd5b5061081d610818366004614487565b612152565b6040516103579190614ab2565b34801561083657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f610380565b34801561086a57600080fd5b5061071e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561089e57600080fd5b506108b26108ad366004614487565b6122cb565b6040516103579190614ade565b3480156108cb57600080fd5b506103806108da366004614b2b565b612501565b3480156108eb57600080fd5b5061059861261c565b34801561090057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610504565b34801561093357600080fd5b50610380612653565b34801561094857600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b34801561097c57600080fd5b506001546001600160a01b0316610504565b34801561099a57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b6103806109d0366004614b92565b612670565b6102b16109e3366004614487565b612730565b3480156109f457600080fd5b506102b1610a0336600461439f565b61282e565b348015610a1457600080fd5b506103ce610a23366004614487565b61289f565b610a3061261c565b81604051602001610a42929190614bcf565b60408051601f198184030181529082905262461bcd60e51b8252610a689160040161484f565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610aa3601085614c38565b610aae906030614c5a565b90506000610abd601086614c73565b610ac8906030614c5a565b905060398260ff161115610ae457610ae1600783614c5a565b91505b60398160ff161115610afe57610afb600782614c5a565b90505b8160f81b83600081518110610b1557610b15614c95565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b4357610b43614c95565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b6000610bb26001836129c1565b9392505050565b6000610c1b6000805160206158b38339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff1690612aab565b60005b82811015610f12576001610c55858584818110610c3d57610c3d614c95565b9050602002810190610c4f9190614cab565b35612abd565b6003811115610c6657610c666145c8565b14610d4b577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610c9e57610c9e614c95565b9050602002810190610cb09190614cab565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610ceb90600190600401614950565b600060405180830381865af4158015610d08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d309190810190614d1a565b604051610d3e929190614d4e565b60405180910390a1610f0a565b838382818110610d5d57610d5d614c95565b9050602002810190610d6f9190614cab565b610d80906040810190602001614d67565b63ffffffff161580610dc35750838382818110610d9f57610d9f614c95565b9050602002810190610db19190614cab565b610dbf906060810190614d82565b1590505b15610e41577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610dfb57610dfb614c95565b9050602002810190610e0d9190614cab565b35610e1661261c565b604051602001610e269190614dc8565b60408051601f1981840301815290829052610d3e9291614d4e565b610efd848483818110610e5657610e56614c95565b9050602002810190610e689190614cab565b35858584818110610e7b57610e7b614c95565b9050602002810190610e8d9190614cab565b610e9e906040810190602001614d67565b868685818110610eb057610eb0614c95565b9050602002810190610ec29190614cab565b60400135878786818110610ed857610ed8614c95565b9050602002810190610eea9190614cab565b610ef8906060810190614d82565b612b3e565b610f079083614e01565b91505b600101610c1e565b508015610b9f57610b9f3382612d20565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915281600380610f5d83612abd565b6003811115610f6e57610f6e6145c8565b14610ffd576040516353e8875160e11b8152610ff89073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b600060405180830381865af4158015610fcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ff39190810190614d1a565b610a28565b6111b3565b8361104661100a82612d56565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b03909116331490612aab565b61104f85612d56565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff169282019290925260058301546060820152600690920180546080840191906110b490614e14565b80601f01602080910402602001604051908101604052809291908181526020018280546110e090614e14565b801561112d5780601f106111025761010080835404028352916020019161112d565b820191906000526020600020905b81548152906001019060200180831161111057829003601f168201915b505050505081525050935061114d6000805160206158b383398151915290565b60008681526001918201602052604081208181559182908290611172908301826141cf565b506000600282018190556003909101805468ffffffffffffffffff191690556004830181815560058401829055906111ad60068501826141cf565b50505050505b5050919050565b6111fe6040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b61120782612d56565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061125f90614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461128b90614e14565b80156112d85780601f106112ad576101008083540402835291602001916112d8565b820191906000526020600020905b8154815290600101906020018083116112bb57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610b9f82612d74565b611333612e8c565b60005b81518110156113a957600082828151811061135357611353614c95565b6020026020010151905060006113746000805160206158b383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101611336565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516113d99190614e48565b60405180910390a150565b60006113f1600184611f21565b61142a81345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b815250612aab565b61146861143882600a614e89565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b815250612aab565b8261149e61147582612eb9565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b815250612aab565b6114aa85856000612f12565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168334866040516114df93929190614ec4565b60405180910390a1505092915050565b6000546001600160a01b0316606081611542576060838060200190518101906115189190614f0b565b909350905061152683612fe6565b8080602001905181019061153a9190614f5b565b91505061159c565b611585826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b815250612aab565b828060200190518101906115999190614f5b565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe541580159061160d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b15611643576116436040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a28565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b60208201526116e7907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b151590612aab565b6117ba630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190614ff4565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b815250612aab565b611941306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611849919061501e565b6001600160a01b031614801561191157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611906919061501e565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b815250612aab565b61194a81612fff565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66119c9611a99565b6040516119d6919061484f565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611a40907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161503b565b600060405180830381865af4158015611a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bb29190810190615085565b611a8d612e8c565b611a9681612fff565b50565b6060611ac47f00000000000000000000000000000000000000000000000000000000000000006130a5565b905090565b6060816001600160401b03811115611ae357611ae3614600565b604051908082528060200260200182016040528015611b0c578160200160208202803683370190505b50905060005b82811015611b8457611b3b848483818110611b2f57611b2f614c95565b90506020020135612abd565b828281518110611b4d57611b4d614c95565b60200260200101906003811115611b6657611b666145c8565b90816003811115611b7957611b796145c8565b905250600101611b12565b5092915050565b6000611ba46000805160206158b3833981519152610bce565b84600180611bb183612abd565b6003811115611bc257611bc26145c8565b14611c07576040516353e8875160e11b8152611c029073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b611c51565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611c419085151590612aab565b611c4e8742888888613149565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610b9f5750816001600160a01b0316611ca16000546001600160a01b031690565b6001600160a01b03161492915050565b6000610b9f82612abd565b611cc4612e8c565b611cce6000612fe6565b565b60015433906001600160a01b03168114611d3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a68565b611a9681612fe6565b6000610bb260018361316d565b6060611d5f82613205565b6002018054611d6d90614e14565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9990614e14565b8015611de65780601f10611dbb57610100808354040283529160200191611de6565b820191906000526020600020905b815481529060010190602001808311611dc957829003601f168201915b50505050509050919050565b60008060005b87811015611f15576001611e178a8a84818110611b2f57611b2f614c95565b6003811115611e2857611e286145c8565b03611f0d576000611e508a8a84818110611e4457611e44614c95565b90506020020135612d56565b8054909150611e6f90600160b81b90046001600160481b031685614e01565b8154909450600160a01b900462ffffff1615611eaf578054611e9e908790600160a01b900462ffffff16610ba5565b611ea89084614e01565b9250611edf565b600281015415611ec757611e9e868260020154611f21565b611ed2866000611d47565b611edc9084614e01565b92505b84611eec82600301613226565b6001600160401b0316611eff9190614e89565b611f099084614e01565b9250505b600101611df8565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf9190615140565b9050611fe560008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b815250612aab565b611fef8482611d47565b949350505050565b600033826120b1823b1580159061207257506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612072919061515d565b8015612083575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b815250612aab565b6120bd60015b85610ba5565b6120c781346113f7565b6120d561143882600a614e89565b856120e261147582612eb9565b6120ee60008888612f12565b945088886120fb87612d56565b6001019161210a9190836151cf565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161213e93929190614ec4565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152600061217283612d74565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b84628261219886613205565b6002016040518363ffffffff1660e01b81526004016121b892919061528f565b600060405180830381865af49250505080156121f657506040513d6000823e601f3d908101601f191682016040526121f3919081019061532e565b60015b610bb2576122026153c7565b806308c379a00361225e57506122166153e3565b806122215750612260565b60408051808201909152806000815260200182604051602001612244919061546c565b60408051601f198184030181529190529052949350505050565b505b3d80801561228a576040519150601f19603f3d011682016040523d82523d6000602084013e61228f565b606091505b50604080518082019091528060008152602001604051806060016040528060218152602001615892602191399052949350505050565b50919050565b6122d3614209565b60008281526000805160206158d383398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a08501919061234e90614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461237a90614e14565b80156123c75780601f1061239c576101008083540402835291602001916123c7565b820191906000526020600020905b8154815290600101906020018083116123aa57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff16928101929092526005850154606083015260068501805494909301939192909160808401919061247590614e14565b80601f01602080910402602001604051908101604052809291908181526020018280546124a190614e14565b80156124ee5780601f106124c3576101008083540402835291602001916124ee565b820191906000526020600020905b8154815290600101906020018083116124d157829003601f168201915b5050509190925250505090525092915050565b600061251a6000805160206158b3833981519152610bce565b8560018061252783612abd565b6003811115612538576125386145c8565b1461257d576040516353e8875160e11b81526125789073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b612611565b6125c760008863ffffffff1611801561259c5750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b815250612aab565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526126019085151590612aab565b61260e8888888888613149565b92505b505095945050505050565b60408051808201909152601981527f5769746e65744f7261636c65547275737461626c655265656600000000000000602082015290565b60006000805160206158b383398151915254611ac4906001614e01565b600033826126ae823b1580159061207257506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e5690602401612031565b6126b860016120b7565b6126c281346113f7565b6126d061143882600a614e89565b856126dd61147582612eb9565b6126e8888888612f12565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161271d93929190614ec4565b60405180910390a1505050509392505050565b8060018061273d83612abd565b600381111561274e5761274e6145c8565b14612793576040516353e8875160e11b815261278e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610fae908590600401614950565b505050565b600061279e84612d56565b905034815482906017906127c3908490600160b81b90046001600160481b03166154a5565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b612836612e8c565b600180546001600160a01b0383166001600160a01b031990911681179091556128676000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6040805160a08101825260008082526020820181905291810182905260608082019290925260808101919091526128d582613205565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff16918101919091526001820154606082015260028201805491929160808401919061293890614e14565b80601f016020809104026020016040519081016040528092919081815260200182805461296490614e14565b80156129b15780601f10612986576101008083540402835291602001916129b1565b820191906000526020600020905b81548152906001019060200180831161299457829003601f168201915b5050505050815250509050919050565b6000806129ef7f00000000000000000000000000000000000000000000000000000000000000006003614e89565b612a19907f0000000000000000000000000000000000000000000000000000000000000000614e01565b9050808362ffffff161080612a5b575080612a5962ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614e01565b105b15612a7257612a6a8185614e89565b915050610b9f565b612aa162ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614e01565b612a6a9085614e89565b81612ab957612ab981610a28565b5050565b60008181526000805160206158d3833981519152602052604081206004810154600160e01b900463ffffffff1615612b1c576004810154600160a01b90046001600160401b03164310612b135750600392915050565b50600292915050565b80546001600160a01b031615612b355750600192915050565b50600092915050565b600080612b4a87612d56565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff1615612c9857805460009081908190612bb9908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613256565b9250925092508115612c0a57604080518b81526001602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612c75565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88886001876000875111612c585760405180606001604052806029815260200161586960299139612c5a565b865b604051612c6c969594939291906154c5565b60405180910390a15b612c908a8a8a604051806020016040528060008152506135ec565b505050612d16565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c2778760016040805192835260208301919091520160405180910390a1612d1687878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561278e573d6000803e3d6000fd5b60009081526000805160206158d38339815191526020526040902090565b600080612d8083612abd565b90506003816003811115612d9657612d966145c8565b03612e485760008381526000805160206158d38339815191526020526040812060060180549091908290612dc990614e14565b90501115612e3e578054601b60fb1b908290600090612de790614e14565b8110612df557612df5614c95565b815460011615612e145790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612e34576002611fef565b6003949350505050565b5060059392505050565b6001816003811115612e5c57612e5c6145c8565b03612e6a5750600192915050565b6002816003811115612e7e57612e7e6145c8565b03612b355750600492915050565b6000546001600160a01b03163314611cce5760405163118cdaa760e01b8152336004820152602401610a68565b600080612ecc6040840160208501615522565b6001600160401b0316118015612ef157506000612eec602084018461553f565b60ff16115b8015610b9f5750607f612f07602084018461553f565b60ff16111592915050565b60006000805160206158b38339815191528054600090612f319061555c565b918290555090506000612f4382612d56565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b6020820152919250612f83916001600160a01b039091161590612aab565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b0316178155600281018590558360038201612fdb8282615575565b905050509392505050565b600180546001600160a01b0319169055611a96816136b9565b60005b815181101561307557600082828151811061301f5761301f614c95565b6020026020010151905060016130406000805160206158b383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101613002565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516113d99190614e48565b606060006130b283613709565b6001600160401b038111156130c9576130c9614600565b6040519080825280601f01601f1916602001820160405280156130f3576020820181803683370190505b50905060005b8151811015611b845783816020811061311457613114614c95565b1a60f81b82828151811061312a5761312a614c95565b60200101906001600160f81b031916908160001a9053506001016130f9565b60006131588686868686612b3e565b90506131643382612d20565b95945050505050565b6000602061ffff83161561318b576131866001846155c5565b61318e565b60005b61319891906155e0565b6131a3906004615601565b6131d19061ffff167f0000000000000000000000000000000000000000000000000000000000000000614e89565b6131fb907f0000000000000000000000000000000000000000000000000000000000000000614e01565b610bb29084614e89565b60009081526000805160206158d38339815191526020526040902060040190565b80546000906132399060ff166003614c5a565b8254610b9f9160ff169061010090046001600160401b031661561c565b60008060605a9250601b60fb1b878760008161327457613274614c95565b9050013560f81c60f81b6001600160f81b031916036134c45760006132d66132d189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b61376c565b90506002815110156133fd57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b815260040161338a969594939291906156c8565b600060405180830381600088803b1580156133a457600080fd5b5087f1935050505080156133b6575060015b6133f4576133c26153c7565b806308c379a0036133e857506133d66153e3565b806133e157506133ea565b91506134be565b505b3d6000803e3d6000fd5b600192506134be565b856001600160a01b03166363febc9c868d8d8d436134348860008151811061342757613427614c95565b602002602001015161391c565b60fe811115613445576134456145c8565b8860008151811061345857613458614c95565b60200260200101516040518863ffffffff1660e01b8152600401613481969594939291906156c8565b600060405180830381600088803b15801561349b57600080fd5b5087f1935050505080156134ad575060015b6134b9576133c26153c7565b600192505b506135d2565b846001600160a01b031663bcc6307b858c8c8c436135178e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b6040518763ffffffff1660e01b8152600401613537959493929190615715565b600060405180830381600088803b15801561355157600080fd5b5087f193505050508015613563575060015b6135cd5761356f6153c7565b806308c379a00361359557506135836153e3565b8061358e5750613597565b90506135d2565b505b3d8080156135c1576040519150601f19603f3d011682016040523d82523d6000602084013e6135c6565b606091505b50506135d2565b600191505b5a6135dd9084615749565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061363485612d56565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136b0908261575c565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137425781816020811061372757613727614c95565b1a60f81b6001600160f81b031916156137425760010161370c565b919050565b61374f61428b565b6040805180820190915282815260006020820152610bb28161397f565b60608160048060ff16826040015160ff16146137ac57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b60006137c085600001518660600151613a9f565b90506137cd81600161581b565b6001600160401b03166001600160401b038111156137ed576137ed614600565b60405190808252806020026020018201604052801561382657816020015b61381361428b565b81526020019060019003908161380b5790505b50935060005b816001600160401b03168110156138ec5761384686613b67565b955061385186613b8f565b85828151811061386357613863614c95565b6020026020010181905250600460ff16866040015160ff16036138bc57600061388b8761376c565b9050806001825161389c9190615749565b815181106138ac576138ac614c95565b60200260200101519650506138e4565b600560ff16866040015160ff16036138d957600061388b87613c27565b6138e286613e11565b505b60010161382c565b508484826001600160401b03168151811061390957613909614c95565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461395c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b61396e84600001518560600151613a9f565b6001600160401b0316949350505050565b61398761428b565b81515182906000036139ac576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a2f576139cc89613fd6565b9550816139d88161555c565b6007600589901c169650601f881695509250506005198501613a27576020890151613a038a86613a9f565b9350808a60200151613a159190615749565b613a1f9084614e01565b9250506139bd565b5060006139bd565b600760ff86161115613a595760405163bd2ac87960e01b815260ff86166004820152602401610a68565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ab7575060ff8116610b9f565b8160ff16601803613ad557613acb83613fd6565b60ff169050610b9f565b8160ff16601903613af457613ae983614038565b61ffff169050610b9f565b8160ff16601a03613b1557613b08836140a4565b63ffffffff169050610b9f565b8160ff16601b03613b3057613b2983614103565b9050610b9f565b8160ff16601f03613b4957506001600160401b03610b9f565b604051636d785b1360e01b815260ff83166004820152602401610a68565b613b6f61428b565b81518051516020909101511015613b8b578151610b9f9061397f565b5090565b613b9761428b565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c6757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b6000613c7b85600001518660600151613a9f565b613c8690600261561c565b9050613c9381600161581b565b6001600160401b03166001600160401b03811115613cb357613cb3614600565b604051908082528060200260200182016040528015613cec57816020015b613cd961428b565b815260200190600190039081613cd15790505b50935060005b816001600160401b03168110156138ec57613d0c86613b67565b9550613d1786613b8f565b858281518110613d2957613d29614c95565b6020908102919091010152613d3f60028261583b565b158015613d545750604086015160ff16600314155b15613d8257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a68565b604086015160ff1660041480613d9f5750604086015160ff166005145b15613dfe57604086015160009060ff16600414613dc457613dbf87613c27565b613dcd565b613dcd8761376c565b90508060018251613dde9190615749565b81518110613dee57613dee614c95565b6020026020010151965050613e09565b613e0786613e11565b505b600101613cf2565b613e1961428b565b604082015160ff161580613e345750604082015160ff166001145b80613e6d5750604082015160ff166007148015613e5957506019826060015160ff1610155b8015613e6d5750601b826060015160ff1611155b15613ea057613e7b82614162565b6001600160401b03168260000151602001818151613e999190614e01565b9052505090565b604082015160ff1660031480613ebd5750604082015160ff166002145b15613f01576000613ed683600001518460600151613a9f565b9050806001600160401b03168360000151602001818151613ef79190614e01565b905250613b8b9050565b604082015160ff1660041480613f1e5750604082015160ff166005145b15613f4757613f3582600001518360600151613a9f565b6001600160401b031660808301525090565b604082015160ff166007141580613f795750816060015160ff16601414158015613f795750816060015160ff16601514155b15613b8b5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a68565b600081602001518260000151518082111561400e576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b835160208501805180830160010151955090819061402b8261555c565b8152505050505050919050565b60008160200151600261404b9190614e01565b82515180821115614079576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516002818401810151965090916140978284614e01565b9052509395945050505050565b6000816020015160046140b79190614e01565b825151808211156140e5576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516004818401810151965090916140978284614e01565b6000816020015160086141169190614e01565b82515180821115614144576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516008818401810151965090916140978284614e01565b60006018826060015160ff16101561417c57506000919050565b601c826060015160ff1610156141ab576018826060015161419d919061584f565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a68565b5080546141db90614e14565b6000825580601f106141eb575050565b601f016020900490600052602060002090810190611a9691906142d2565b60405180604001604052806142586040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526040805160a08101825260008082526020828101829052928201819052606080830191909152608082015291015290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613b8b57600081556001016142d3565b60005b838110156143025781810151838201526020016142ea565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614339816013850160208a016142e7565b855190830190614350816013840160208a016142e7565b85519101906143668160138401602089016142e7565b845191019061437c8160138401602088016142e7565b016013019695505050505050565b6001600160a01b0381168114611a9657600080fd5b6000602082840312156143b157600080fd5b8135610bb28161438a565b803562ffffff8116811461374257600080fd5b600080604083850312156143e257600080fd5b823591506143f2602084016143bc565b90509250929050565b60008083601f84011261440d57600080fd5b5081356001600160401b0381111561442457600080fd5b6020830191508360208260051b850101111561443f57600080fd5b9250929050565b6000806020838503121561445957600080fd5b82356001600160401b0381111561446f57600080fd5b61447b858286016143fb565b90969095509350505050565b60006020828403121561449957600080fd5b5035919050565b600081518084526144b88160208601602086016142e7565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a06080850152611fef60a08501826144a0565b602081526000610bb260208301846144cc565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261457c60e08501826144a0565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000610bb26020830184614533565b634e487b7160e01b600052602160045260246000fd5b600681106145ee576145ee6145c8565b9052565b60208101610b9f82846145de565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561463b5761463b614600565b6040525050565b60006001600160401b0382111561465b5761465b614600565b5060051b60200190565b6000602080838503121561467857600080fd5b82356001600160401b0381111561468e57600080fd5b8301601f8101851361469f57600080fd5b80356146aa81614642565b6040516146b78282614616565b82815260059290921b83018401918481019150878311156146d757600080fd5b928401925b828410156146fe5783356146ef8161438a565b825292840192908401906146dc565b979650505050505050565b6000604082840312156122c557600080fd5b6000806060838503121561472e57600080fd5b823591506143f28460208501614709565b60006001600160401b0382111561475857614758614600565b50601f01601f191660200190565b60006020828403121561477857600080fd5b81356001600160401b0381111561478e57600080fd5b8201601f8101841361479f57600080fd5b80356147aa8161473f565b6040516147b78282614616565b8281528660208486010111156147cc57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561484257603f198886030184526148308583516144a0565b94509285019290850190600101614814565b5092979650505050505050565b602081526000610bb260208301846144a0565b600481106145ee576145ee6145c8565b6020808252825182820181905260009190848201906040850190845b818110156148b1576148a1838551614862565b928401929184019160010161488e565b50909695505050505050565b60008083601f8401126148cf57600080fd5b5081356001600160401b038111156148e657600080fd5b60208301915083602082850101111561443f57600080fd5b6000806000806060858703121561491457600080fd5b843593506020850135925060408501356001600160401b0381111561493857600080fd5b614944878288016148bd565b95989497509550505050565b60208101610b9f8284614862565b61ffff81168114611a9657600080fd5b6000806040838503121561498157600080fd5b8235915060208301356149938161495e565b809150509250929050565b600080600080600080608087890312156149b757600080fd5b86356001600160401b03808211156149ce57600080fd5b6149da8a838b016143fb565b909850965060208901359150808211156149f357600080fd5b50614a0089828a016148bd565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a2e57600080fd5b50508035926020909101359150565b60008060008060808587031215614a5357600080fd5b84356001600160401b03811115614a6957600080fd5b614a75878288016148bd565b9095509350614a8990508660208701614709565b9150614a97606086016143bc565b905092959194509250565b60ff81106145ee576145ee6145c8565b60208152614ac4602082018351614aa2565b60006020830151604080840152611fef60608401826144a0565b602081526000825160406020840152614afa6060840182614533565b90506020840151601f1984830301604085015261316482826144cc565b803563ffffffff8116811461374257600080fd5b600080600080600060808688031215614b4357600080fd5b85359450614b5360208701614b17565b93506040860135925060608601356001600160401b03811115614b7557600080fd5b614b81888289016148bd565b969995985093965092949392505050565b600080600060808486031215614ba757600080fd5b83359250614bb88560208601614709565b9150614bc6606085016143bc565b90509250925092565b60008351614be18184602088016142e7565b6101d160f51b9083019081528351614c008160028401602088016142e7565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c4b57614c4b614c0c565b8060ff84160491505092915050565b60ff8181168382160190811115610b9f57610b9f614c22565b600060ff831680614c8657614c86614c0c565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b60008235607e19833603018112614cc157600080fd5b9190910192915050565b600082601f830112614cdc57600080fd5b8151614ce78161473f565b604051614cf48282614616565b828152856020848701011115614d0957600080fd5b6131648360208301602088016142e7565b600060208284031215614d2c57600080fd5b81516001600160401b03811115614d4257600080fd5b611fef84828501614ccb565b828152604060208201526000611fef60408301846144a0565b600060208284031215614d7957600080fd5b610bb282614b17565b6000808335601e19843603018112614d9957600080fd5b8301803591506001600160401b03821115614db357600080fd5b60200191503681900382131561443f57600080fd5b60008251614dda8184602087016142e7565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b80820180821115610b9f57610b9f614c22565b600181811c90821680614e2857607f821691505b6020821081036122c557634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148b15783516001600160a01b031683529284019291840191600101614e64565b8082028115828204841417610b9f57610b9f614c22565b60ff81168114611a9657600080fd5b6001600160401b0381168114611a9657600080fd5b83815260208101839052608081018235614edd81614ea0565b60ff1660408301526020830135614ef381614eaf565b6001600160401b038116606084015250949350505050565b60008060408385031215614f1e57600080fd5b8251614f298161438a565b60208401519092506001600160401b03811115614f4557600080fd5b614f5185828601614ccb565b9150509250929050565b60006020808385031215614f6e57600080fd5b82516001600160401b03811115614f8457600080fd5b8301601f81018513614f9557600080fd5b8051614fa081614642565b604051614fad8282614616565b82815260059290921b8301840191848101915087831115614fcd57600080fd5b928401925b828410156146fe578351614fe58161438a565b82529284019290840190614fd2565b60006020828403121561500657600080fd5b81516001600160e01b031981168114610bb257600080fd5b60006020828403121561503057600080fd5b8151610bb28161438a565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561506b57600080fd5b8260051b8085606085013791909101606001949350505050565b6000602080838503121561509857600080fd5b82516001600160401b03808211156150af57600080fd5b818501915085601f8301126150c357600080fd5b81516150ce81614642565b6040516150db8282614616565b82815260059290921b84018501918581019150888311156150fb57600080fd5b8585015b83811015615133578051858111156151175760008081fd5b6151258b89838a0101614ccb565b8452509186019186016150ff565b5098975050505050505050565b60006020828403121561515257600080fd5b8151610bb28161495e565b60006020828403121561516f57600080fd5b81518015158114610bb257600080fd5b601f82111561278e576000816000526020600020601f850160051c810160208610156151a85750805b601f850160051c820191505b818110156151c7578281556001016151b4565b505050505050565b6001600160401b038311156151e6576151e6614600565b6151fa836151f48354614e14565b8361517f565b6000601f84116001811461522e57600085156152165750838201355b600019600387901b1c1916600186901b178355615288565b600083815260209020601f19861690835b8281101561525f578685013582556020948501946001909201910161523f565b508682101561527c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b61529981846145de565b6000602060406020840152600084546152b181614e14565b80604087015260606001808416600081146152d357600181146152ef5761531f565b60ff19851660608a0152606084151560051b8a0101955061531f565b89600052602060002060005b858110156153165781548b82018601529083019088016152fb565b8a016060019650505b50939998505050505050505050565b60006020828403121561534057600080fd5b81516001600160401b038082111561535757600080fd5b908301906040828603121561536b57600080fd5b60405160408101818110838211171561538657615386614600565b604052825160ff811061539857600080fd5b81526020830151828111156153ac57600080fd5b6153b887828601614ccb565b60208301525095945050505050565b600060033d11156153e05760046000803e5060005160e01c5b90565b600060443d10156153f15790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561542057505050505090565b82850191508151818111156154385750505050505090565b843d87010160208285010111156154525750505050505090565b61546160208286010187614616565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b8152600082516154988160118501602087016142e7565b9190910160110192915050565b6001600160481b03818116838216019080821115611b8457611b84614c22565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261551560c08201856144a0565b9998505050505050505050565b60006020828403121561553457600080fd5b8135610bb281614eaf565b60006020828403121561555157600080fd5b8135610bb281614ea0565b60006001820161556e5761556e614c22565b5060010190565b813561558081614ea0565b60ff8116905081548160ff198216178355602084013561559f81614eaf565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b61ffff828116828216039080821115611b8457611b84614c22565b600061ffff808416806155f5576155f5614c0c565b92169190910492915050565b61ffff818116838216019080821115611b8457611b84614c22565b6001600160401b0381811683821602808216919082811461563f5761563f614c22565b505092915050565b6000815160c084528051604060c08601526156666101008601826144a0565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526156f36080820184614aa2565b60c060a0820152600061570960c0830184615647565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a0608082015260006146fe60a0830184615647565b81810381811115610b9f57610b9f614c22565b81516001600160401b0381111561577557615775614600565b615789816157838454614e14565b8461517f565b602080601f8311600181146157be57600084156157a65750858301515b600019600386901b1c1916600185901b1785556151c7565b600085815260208120601f198616915b828110156157ed578886015182559484019460019091019084016157ce565b508582101561580b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115611b8457611b84614c22565b60008261584a5761584a614c0c565b500690565b60ff8281168282160390811115610b9f57610b9f614c2256fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220c4e54c07aa8148e91ac97f484a8b7dece10f8e97a94f404ab8d96b382e6997e864736f6c63430008190033",
  "linkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 4103
        },
        {
          "length": 20,
          "start": 4811
        },
        {
          "length": 20,
          "start": 7481
        },
        {
          "length": 20,
          "start": 7967
        },
        {
          "length": 20,
          "start": 10389
        },
        {
          "length": 20,
          "start": 10923
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 9403
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 3266
        },
        {
          "length": 20,
          "start": 3974
        },
        {
          "length": 20,
          "start": 6644
        },
        {
          "length": 20,
          "start": 7130
        },
        {
          "length": 20,
          "start": 9552
        },
        {
          "length": 20,
          "start": 10086
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 8566
        }
      ]
    }
  }
}
