{
  "_format": "hh-sol-artifact-1",
  "contractName": "PreBridgeERC20To",
  "sourceName": "contracts/test/L2StandardBridge.t.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "DepositFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "DepositFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "localToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "remoteToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ERC20BridgeFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "localToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "remoteToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ERC20BridgeInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ERC20DepositInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ERC20WithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ETHBridgeFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ETHBridgeInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ETHDepositInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ETHWithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "FailedRelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "MNTBridgeFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "MNTBridgeInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mntValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ethValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        }
      ],
      "name": "MessagePassed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l2OutputIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l2BlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "l1Timestamp",
          "type": "uint256"
        }
      ],
      "name": "OutputProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "prevNextOutputIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newNextOutputIndex",
          "type": "uint256"
        }
      ],
      "name": "OutputsDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "RelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "messageNonce",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasLimit",
          "type": "uint256"
        }
      ],
      "name": "SentMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mntValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ethValue",
          "type": "uint256"
        }
      ],
      "name": "SentMessageExtension1",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mint",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mntValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ethValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "gasLimit",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isCreation",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "TransactionDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "version",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "opaqueData",
          "type": "bytes"
        }
      ],
      "name": "TransactionDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "returndata",
          "type": "bytes"
        }
      ],
      "name": "WhatHappened",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "name": "WithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "WithdrawalInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "WithdrawalProven",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "excludeArtifacts",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "excludedArtifacts_",
          "type": "string[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "excludeContracts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "excludedContracts_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "excludeSenders",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "excludedSenders_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetArtifactSelectors",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "bytes4[]",
              "name": "selectors",
              "type": "bytes4[]"
            }
          ],
          "internalType": "struct StdInvariant.FuzzSelector[]",
          "name": "targetedArtifactSelectors_",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetArtifacts",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "targetedArtifacts_",
          "type": "string[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetContracts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "targetedContracts_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetSelectors",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "bytes4[]",
              "name": "selectors",
              "type": "bytes4[]"
            }
          ],
          "internalType": "struct StdInvariant.FuzzSelector[]",
          "name": "targetedSelectors_",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetSenders",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "targetedSenders_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nextBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "warpToProposeTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60008054600160ff1991821681178355600480549092168117909155601b805460806001600160a01b03199182168117909255601c80546101009083168117909155601d80546102009316831790559184905260a092909252606460c05260e09290925261c350909152602061014052600861016052674e4f4e5f5a45524f60c01b610180526060610120527fced1f90d33a6ca7cfbe479a1c2415c4287f559420415e3188c786e36414529be601e5560405260226101a0818152906202d95e6101c039601f90620000d2908262000202565b50602380546001600160a01b03199081167342000000000000000000000000000000000000161790915560248054821661abba17905560258054821661acdc179055610708602655600260275560c86028556103e8602955603480549091167342000000000000000000000000000000000000071790553480156200015657600080fd5b50620002ce565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018857607f821691505b602082108103620001a957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001fd57600081815260208120601f850160051c81016020861015620001d85750805b601f850160051c820191505b81811015620001f957828155600101620001e4565b5050505b505050565b81516001600160401b038111156200021e576200021e6200015d565b62000236816200022f845462000173565b84620001af565b602080601f8311600181146200026e5760008415620002555750858301515b600019600386901b1c1916600185901b178555620001f9565b600085815260208120601f198616915b828110156200029f578886015182559484019460019091019084016200027e565b5085821015620002be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516202d6586200030660003960005050600050506000505060005050600050506202d6586000f3fe60806040523480156200001157600080fd5b5060043610620000e55760003560e01c8063916a17c6116200008b578063bcfceff21162000062578063bcfceff2146200018d578063e20c9f7114620001a4578063fa7626d414620001ae57600080fd5b8063916a17c6146200015e578063b5508aa91462000168578063ba414fa6146200017257600080fd5b80633f7286f411620000c05780633f7286f4146200012257806366d9a9a0146200012c57806385226c81146200014557600080fd5b80630a9254e414620000ea5780631ed7831c14620000f65780633e5e3c231462000118575b600080fd5b620000f4620001bc565b005b6200010062001cd4565b6040516200010f919062004a78565b60405180910390f35b6200010062001d45565b6200010062001db4565b6200013662001e23565b6040516200010f919062004ad4565b6200014f62001f38565b6040516200010f919062004c49565b6200013662002012565b6200014f6200211e565b6200017c620021f8565b60405190151581526020016200010f565b620000f46200019e36600462004ccd565b62002362565b6200010062002477565b6000546200017c9060ff1681565b620001c6620024e6565b604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001060048201526024810191909152601060448201527f4c325374616e64617264427269646765000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200027657600080fd5b505af11580156200028b573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001260048201526024810191909152601c60448201527f4f7074696d69736d4d696e7461626c654552433230466163746f7279000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b5050601d546040516000935073ffffffffffffffffffffffffffffffffffffffff909116915062000385906200496e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620003bf573d6000803e3d6000fd5b50601d546040805160048152602481018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb794726200000000000000000000000000000000000000000000000000000000179052825160018183015283518082039092018252808401938490527fb96213e400000000000000000000000000000000000000000000000000000000909352939450737109709ecfa91a80626ff3989d68f67f5b1dd12d9363b96213e4936200049f9373ffffffffffffffffffffffffffffffffffffffff90911692919060440162004ce7565b600060405180830381600087803b158015620004ba57600080fd5b505af1158015620004cf573d6000803e3d6000fd5b5050601d546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156200055357600080fd5b505af115801562000568573d6000803e3d6000fd5b5050603354602d5460405173ffffffffffffffffffffffffffffffffffffffff8681169550636c5d4ad094509283169290911690620005a7906200497c565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620005e8573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518263ffffffff1660e01b815260040162000639919062004d36565b600060405180830381600087803b1580156200065457600080fd5b505af115801562000669573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff16633fdf4e156040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620006d957600080fd5b505af1158015620006ee573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000768919062004d52565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b5050603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4c315374616e646172644272696467655f50726f7879000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620008cd57600080fd5b505af1158015620008e2573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810191909152601560448201527f4c315374616e646172644272696467655f496d706c00000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b5050602d546040516000935085925073ffffffffffffffffffffffffffffffffffffffff90911690620009e0906200498a565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000a21573d6000803e3d6000fd5b5090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663b4d6c7827342000000000000000000000000000000000000108373ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000aca92919062004d8a565b600060405180830381600087803b15801562000ae557600080fd5b505af115801562000afa573d6000803e3d6000fd5b5050603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000167342000000000000000000000000000000000000109081179091556040516000935090915062000b529062004998565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000b8c573d6000803e3d6000fd5b5090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663b4d6c7827342000000000000000000000000000000000000128373ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000c3592919062004d8a565b600060405180830381600087803b15801562000c5057600080fd5b505af115801562000c65573d6000803e3d6000fd5b5050603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000167342000000000000000000000000000000000000121790555050602d54604051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163b4d6c7829173deaddeaddeaddeaddeaddeaddeaddeaddead00009173ffffffffffffffffffffffffffffffffffffffff169062000d0190620049a6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000d3b573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000d8d92919062004d8a565b600060405180830381600087803b15801562000da857600080fd5b505af115801562000dbd573d6000803e3d6000fd5b5050505060405162000dcf90620049b4565b6040808252600f908201527f4e6174697665204c3120546f6b656e000000000000000000000000000000000060608201526080602082018190526003908201527f4c3154000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801562000e55573d6000803e3d6000fd5b50603980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155603654604080517f06fdde030000000000000000000000000000000000000000000000000000000081529051919093169282916306fdde03916004808201926000929091908290030181865afa15801562000ef9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000f41919081019062004e8d565b60405160200162000f53919062004edb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562000fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001037919081019062004e8d565b60405160200162001049919062004edb565b6040516020818303038152906040526040516200106690620049c2565b62001075949392919062004f22565b604051809103906000f08015801562001092573d6000803e3d6000fd5b50603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152601360448201527f4c65676163794d696e7461626c654552433230000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200117257600080fd5b505af115801562001187573d6000803e3d6000fd5b5050603754603954604080517f06fdde03000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416955063896f93d19450929091169182916306fdde039160048083019260009291908290030181865afa1580156200120b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001253919081019062004e8d565b60405160200162001265919062004f7c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001301573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001349919081019062004e8d565b6040516020016200135b919062004f7c565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016200138a9392919062004ce7565b6020604051808303816000875af1158015620013aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d0919062004d52565b603b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603754603954604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290519284169363896f93d193600193909116916306fdde039160048083019260009291908290030181865afa1580156200147c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620014c4919081019062004e8d565b604051602001620014d6919062004f7c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001572573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620015ba919081019062004e8d565b604051602001620015cc919062004f7c565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620015fb9392919062004ce7565b6020604051808303816000875af11580156200161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001641919062004d52565b603e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200169490620049b4565b6040808252600f908201527f4e6174697665204c3220546f6b656e000000000000000000000000000000000060608201526080602082018190526003908201527f4c3254000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156200171a573d6000803e3d6000fd5b50603d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603554604051911690620017709062004998565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620017aa573d6000803e3d6000fd5b50603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155603d54604080517f06fdde030000000000000000000000000000000000000000000000000000000081529051929363896f93d19392169182916306fdde039160048083019260009291908290030181865afa15801562001853573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200189b919081019062004e8d565b604051602001620018ad919062004fc3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252603d547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001949573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001991919081019062004e8d565b604051602001620019a3919062004fc3565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620019d29392919062004ce7565b6020604051808303816000875af1158015620019f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a18919062004d52565b603f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603854603d54604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290519284169363896f93d193600193909116916306fdde039160048083019260009291908290030181865afa15801562001ac4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001b0c919081019062004e8d565b60405160200162001b1e919062004fc3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252603d547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001bba573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001c02919081019062004e8d565b60405160200162001c14919062004fc3565b6040516020818303038152906040526040518463ffffffff1660e01b815260040162001c439392919062004ce7565b6020604051808303816000875af115801562001c63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c89919062004d52565b603a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801562001d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575b5050505050905090565b6060600f80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b6060600e80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801562001f1657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162001ec25790505b5050505050815250508152602001906001019062001e47565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57838290600052602060002001805462001f7e9062004ffd565b80601f016020809104026020016040519081016040528092919081815260200182805462001fac9062004ffd565b801562001ffd5780601f1062001fd15761010080835404028352916020019162001ffd565b820191906000526020600020905b81548152906001019060200180831162001fdf57829003601f168201915b50505050508152602001906001019062001f5c565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156200210557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620020b15790505b5050505050815250508152602001906001019062002036565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f578382906000526020600020018054620021649062004ffd565b80601f0160208091040260200160405190810160405280929190818152602001828054620021929062004ffd565b8015620021e35780601f10620021b757610100808354040283529160200191620021e3565b820191906000526020600020905b815481529060010190602001808311620021c557829003601f168201915b50505050508152602001906001019062002142565b60008054610100900460ff1615620022195750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200235d5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620022c1917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005052565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620022fb916200509c565b6000604051808303816000865af19150503d80600081146200233a576040519150601f19603f3d011682016040523d82523d6000602084013e6200233f565b606091505b5091505080806020019051810190620023599190620050ba565b9150505b919050565b6021546040517fd1de856c00000000000000000000000000000000000000000000000000000000815260048101839052737109709ecfa91a80626ff3989d68f67f5b1dd12d9163e5d6bf029173ffffffffffffffffffffffffffffffffffffffff9091169063d1de856c90602401602060405180830381865afa158015620023ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024149190620050de565b62002421906001620050f8565b6040518263ffffffff1660e01b81526004016200244091815260200190565b600060405180830381600087803b1580156200245b57600080fd5b505af115801562002470573d6000803e3d6000fd5b5050505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b620024f062002ff0565b601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200257057600080fd5b505af115801562002585573d6000803e3d6000fd5b505050506040516200259790620049d0565b604051809103906000f080158015620025b4573d6000803e3d6000fd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603054602d546040516000939283169291909116906200261690620049de565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002657573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620026db57600080fd5b505af1158015620026f0573d6000803e3d6000fd5b50506032546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250639b2ea4bd91506200274c90849060040162005138565b600060405180830381600087803b1580156200276757600080fd5b505af11580156200277c573d6000803e3d6000fd5b50506032546040516000935073ffffffffffffffffffffffffffffffffffffffff9091169150620027ad90620049ec565b620027b991906200519a565b604051809103906000f080158015620027d6573d6000803e3d6000fd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517f8129fc1c00000000000000000000000000000000000000000000000000000000815290519293509091638129fc1c9160048082019260009290919082900301818387803b1580156200287057600080fd5b505af115801562002885573d6000803e3d6000fd5b5050603354604051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063b4d6c78292507342000000000000000000000000000000000000079173ffffffffffffffffffffffffffffffffffffffff1690620028e390620049fa565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200291d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b81526004016200296f92919062004d8a565b600060405180830381600087803b1580156200298a57600080fd5b505af11580156200299f573d6000803e3d6000fd5b50505050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002a0e57600080fd5b505af115801562002a23573d6000803e3d6000fd5b5050603254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600e60448201527f416464726573734d616e616765720000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ada57600080fd5b505af115801562002aef573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810191909152601b60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f496d706c00000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ba557600080fd5b505af115801562002bba573d6000803e3d6000fd5b5050603354604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152601c60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f50726f7879000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002c7157600080fd5b505af115801562002c86573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273deaddeaddeaddeaddeaddeaddeaddeaddead000060048201526024810191909152600e60448201527f4c656761637945524332304d4e540000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002d3a57600080fd5b505af115801562002d4f573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273deaddeaddeaddeaddeaddeaddeaddeaddead111160048201526024810191909152600e60448201527f4c656761637945524332304554480000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002e0357600080fd5b505af115801562002e18573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000760048201526024810191909152601660448201527f4c3243726f7373446f6d61696e4d657373656e676572000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ecc57600080fd5b505af115801562002ee1573d6000803e3d6000fd5b5050603354737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c718915062002f389073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152601e60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f616c6961736564000060648201526084015b600060405180830381600087803b15801562002fd357600080fd5b505af115801562002fe8573d6000803e3d6000fd5b505050505050565b62002ffa62003563565b6000620030806040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b9050600160006127106000801b6301c9c380600086604051620030a39062004a08565b73ffffffffffffffffffffffffffffffffffffffff978816815260208082019790975260408082019690965260608082019590955267ffffffffffffffff9093166080808501919091529690911660a080840191909152815163ffffffff90811660c08501529582015160ff90811660e0850152948201519094166101008301529182015184166101208201529381015190921661014084015201516fffffffffffffffffffffffffffffffff1661016082015261018001604051809103906000f08015801562003178573d6000803e3d6000fd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155602154602a54602d54604051928516949182169360019390929190911690620031e69062004a16565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152911515604084015283166060830152909116608082015260a001604051809103906000f0801580156200323f573d6000803e3d6000fd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d5460405160009291909116906200329a9062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620032d4573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200335857600080fd5b505af11580156200336d573d6000803e3d6000fd5b5050602f5460408051600060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd53a822f0000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681169550634f1ef2869450620034319316919060040162004d8a565b6000604051808303816000875af115801562003451573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262003499919081019062004e8d565b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600e60448201527f4f7074696d69736d506f7274616c0000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189060840162002fb8565b6200356d620037e0565b601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620035ed57600080fd5b505af115801562003602573d6000803e3d6000fd5b5050604051737109709ecfa91a80626ff3989d68f67f5b1dd12d925063b4d6c782915073deaddeaddeaddeaddeaddeaddeaddeaddead111190620036469062004a32565b604051809103906000f08015801562003663573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620036b592919062004d8a565b600060405180830381600087803b158015620036d057600080fd5b505af1158015620036e5573d6000803e3d6000fd5b5050602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673deaddeaddeaddeaddeaddeaddeaddeaddead1111908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600760448201527f42564d5f455448000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620037c557600080fd5b505af1158015620037da573d6000803e3d6000fd5b50505050565b620037ea62003b5b565b604051620037f89062004a40565b604051809103906000f08015801562003815573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d546040516000929190911690620038709062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620038aa573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200392e57600080fd5b505af115801562003943573d6000803e3d6000fd5b5050602c54601d54604080517502ac3a4edbbfb8014e3ba83411e915e8000000000000602482015273ffffffffffffffffffffffffffffffffffffffff92831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fda35a26f0000000000000000000000000000000000000000000000000000000017905290517f4f1ef2860000000000000000000000000000000000000000000000000000000081528683169550634f1ef286945062003a2993929092169160040162004d8a565b6000604051808303816000875af115801562003a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262003a91919081019062004e8d565b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600d60448201527f4c314d616e746c65546f6b656e000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189060840162002440565b62003b65620042ae565b62003ba56040518060400160405280600881526020017f677561726469616e000000000000000000000000000000000000000000000000815250620047ee565b602a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560295462003bfa906001620050f8565b602b8190556040517fe5d6bf020000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e5d6bf0290602401600060405180830381600087803b15801562003c6757600080fd5b505af115801562003c7c573d6000803e3d6000fd5b50506028546040517f1f7b4f300000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250631f7b4f309150602401600060405180830381600087803b15801562003ceb57600080fd5b505af115801562003d00573d6000803e3d6000fd5b50506026546027546028546029546024546025546040519597509395509193909273ffffffffffffffffffffffffffffffffffffffff92831692169062093a809062003d4c9062004a4e565b96875260208701959095526040860193909352606085019190915273ffffffffffffffffffffffffffffffffffffffff90811660808501521660a083015260c082015260e001604051809103906000f08015801562003daf573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d54604051600092919091169062003e0a9062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562003e44573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562003ec857600080fd5b505af115801562003edd573d6000803e3d6000fd5b50506022546028546029546040516024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff8581169450634f1ef286935090911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe4a3011600000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815262003fd092919060040162004d8a565b6000604051808303816000875af115801562003ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004038919081019062004e8d565b50602180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600e60448201527f4c324f75747075744f7261636c650000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200411757600080fd5b505af11580156200412c573d6000803e3d6000fd5b5050604051737109709ecfa91a80626ff3989d68f67f5b1dd12d925063b4d6c782915073420000000000000000000000000000000000001690620041709062004a5c565b604051809103906000f0801580156200418d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620041df92919062004d8a565b600060405180830381600087803b158015620041fa57600080fd5b505af11580156200420f573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001660048201526024810191909152601360448201527f4c32546f4c314d657373616765506173736572000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c718915060840162002440565b601b546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156200433757600080fd5b505af11580156200434c573d6000803e3d6000fd5b5050601c546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015620043d957600080fd5b505af1158015620043ee573d6000803e3d6000fd5b5050601d546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156200447b57600080fd5b505af115801562004490573d6000803e3d6000fd5b5050601b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600560448201527f616c6963650000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200454757600080fd5b505af11580156200455c573d6000803e3d6000fd5b5050601c54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600360448201527f626f6200000000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200461357600080fd5b505af115801562004628573d6000803e3d6000fd5b5050601d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600860448201527f6d756c74697369670000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620046df57600080fd5b505af1158015620046f4573d6000803e3d6000fd5b50506040517f39b37ab0000000000000000000000000000000000000000000000000000000008152633b9aca006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506339b37ab09150602401600060405180830381600087803b1580156200476257600080fd5b505af115801562004777573d6000803e3d6000fd5b50505050604051620047899062004a6a565b604051809103906000f080158015620047a6573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000620047fb8262004802565b5092915050565b600080826040516020016200481891906200509c565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620048b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048de919062004d52565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189062004935908590879060040162004d8a565b600060405180830381600087803b1580156200495057600080fd5b505af115801562004965573d6000803e3d6000fd5b50505050915091565b610a4480620051f583390190565b61394d8062005c3983390190565b61395f806200958683390190565b612435806200cee583390190565b61112b806200f31a83390190565b610e3c806201044583390190565b611560806201128183390190565b61066d80620127e183390190565b6129cf8062012e4e83390190565b6105f0806201581d83390190565b6126098062015e0d83390190565b6122d2806201841683390190565b61608c806201a6e883390190565b610918806202077483390190565b6117e6806202108c83390190565b613cad806202287283390190565b611b02806202651f83390190565b610b1e806202802183390190565b614b0d8062028b3f83390190565b6020808252825182820181905260009190848201906040850190845b8181101562004ac857835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010162004a94565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101562004bbf578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b8083101562004ba95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b019062004b65565b50978a0197955050509187019160010162004afc565b50919998505050505050505050565b60005b8381101562004beb57818101518382015260200162004bd1565b83811115620037da5750506000910152565b6000815180845262004c1781602086016020860162004bce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562004cc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845262004cad85835162004bfd565b9450928501929085019060010162004c70565b5092979650505050505050565b60006020828403121562004ce057600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600062004d18606083018562004bfd565b828103604084015262004d2c818562004bfd565b9695505050505050565b60208152600062004d4b602083018462004bfd565b9392505050565b60006020828403121562004d6557600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811462004d4b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062004dbb604083018462004bfd565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111562004e105762004e1062004dc3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562004e595762004e5962004dc3565b8160405280935085815286868601111562004e7357600080fd5b62004e8386602083018762004bce565b5050509392505050565b60006020828403121562004ea057600080fd5b815167ffffffffffffffff81111562004eb857600080fd5b8201601f8101841362004eca57600080fd5b62004dbb8482516020840162004df2565b7f4c65676163794c322d000000000000000000000000000000000000000000000081526000825162004f1581600985016020870162004bce565b9190910160090192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015262004f5d608083018562004bfd565b828103606084015262004f71818562004bfd565b979650505050505050565b7f4c322d000000000000000000000000000000000000000000000000000000000081526000825162004fb681600385016020870162004bce565b9190910160030192915050565b7f4c312d000000000000000000000000000000000000000000000000000000000081526000825162004fb681600385016020870162004bce565b600181811c908216806200501257607f821691505b6020821081036200504c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200508e81600485016020870162004bce565b919091016004019392505050565b60008251620050b081846020870162004bce565b9190910192915050565b600060208284031215620050cd57600080fd5b8151801515811462004d4b57600080fd5b600060208284031215620050f157600080fd5b5051919050565b6000821982111562005133577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b6040815260006200517660408301601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b73ffffffffffffffffffffffffffffffffffffffff8216815260406020820152600062004d4b60408301601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000060208201526040019056fe608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b506040516200394d3803806200394d83398101604081905262000035916200008f565b6001600160a01b0391821660805273420000000000000000000000000000000000001060a052600160c081905260e0526000610100521661012052620000ce565b6001600160a01b03811681146200008c57600080fd5b50565b60008060408385031215620000a357600080fd5b8251620000b08162000076565b6020840151909250620000c38162000076565b809150509250929050565b60805160a05160c05160e0516101005161012051613787620001c66000396000818161050b015281816117a301528181611db901528181611e5001526120b501526000611108015260006110df015260006110b60152600081816103b70152818161046e015281816105e101528181610ac2015281816115fb0152818161191901528181611f9a01526123ea0152600081816102d3015281816104a4015281816105b70152818161061801528181610a9801528181610af901528181610d86015281816115d101528181611632015281816117c5015281816118db01528181611e1e01528181611f5c01526123ad01526137876000f3fe60806040526004361061019a5760003560e01c8063838b2520116100e1578063a9f9e6751161008a578063c8beb96511610064578063c8beb96514610540578063e11013dd14610553578063f407a99e14610566578063f82b418e1461057957600080fd5b8063a9f9e675146104d9578063ac6986c5146104f9578063b1a1a8821461052d57600080fd5b806391c49bf8116100bb57806391c49bf81461045f578063927ede2d146104925780639a2ac6d5146104c657600080fd5b8063838b2520146103d957806387087623146103f95780638f601f661461041957600080fd5b80634188f7f11161014357806358a997f61161011d57806358a997f61461037257806369516df5146103925780637f46ddb2146103a557600080fd5b80634188f7f11461031d578063540abf731461033057806354fd4d501461035057600080fd5b80631635f5fd116101745780631635f5fd1461029e57806324e00ccb146102b15780633cb747bf146102c457600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d406040518060200160405280600081525061058c565b005b600080fd5b34801561026457600080fd5b50610251610273366004612fcf565b61059f565b610251610286366004613080565b610995565b6102516102993660046130d3565b610a6c565b6102516102ac3660046130d3565b610a80565b6102516102bf366004613146565b610f55565b3480156102d057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61025161032b3660046131a0565b611027565b34801561033c57600080fd5b5061025161034b3660046131f4565b61106a565b34801561035c57600080fd5b506103656110af565b60405161031491906132e1565b34801561037e57600080fd5b5061025161038d3660046132f4565b611152565b6102516103a0366004613377565b611226565b3480156103b157600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e557600080fd5b506102516103f43660046131f4565b611269565b34801561040557600080fd5b506102516104143660046132f4565b6112ae565b34801561042557600080fd5b506104516104343660046133af565b600360209081526000928352604080842090915290825290205481565b604051908152602001610314565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f3565b34801561049e57600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102516104d43660046133e8565b611382565b3480156104e557600080fd5b506102516104f4366004612fcf565b6113c4565b34801561050557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b61025161053b366004613080565b6113d3565b61025161054e366004613146565b6114a4565b6102516105613660046133e8565b611576565b6102516105743660046130d3565b6115b9565b6102516105873660046130d3565b61182d565b610599848434858561183a565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156106bd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b61077887611a25565b156108c6576107878787611a87565b610839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50505050610948565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a1683529290522054610904908490613463565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c1683529390529190912091909155610948908585611ba7565b61098c878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7b92505050565b50505050505050565b333b15610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610a673333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183a92505050565b505050565b610a798585858585610a80565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610b9e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b823414610cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610d84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610ea185858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d0992505050565b6000610ebe855a8660405180602001604052806000815250611d7c565b905080610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b333b15610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b6105993333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9692505050565b610a793385878686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9f92505050565b61098c87873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd892505050565b60606110da7f00000000000000000000000000000000000000000000000000000000000000006124fc565b6111037f00000000000000000000000000000000000000000000000000000000000000006124fc565b61112c7f00000000000000000000000000000000000000000000000000000000000000006124fc565b60405160200161113e9392919061347a565b604051602081830303815290604052905090565b333b156111e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610f4d86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263992505050565b610a793386868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9692505050565b61098c87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263992505050565b333b1561133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610f4d86863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd892505050565b61059933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061058c92505050565b61098c8787878787878761059f565b333b15611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610a6733338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061058c92505050565b333b15611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b6105993333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9f92505050565b6105993385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183a92505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156116d757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6117eb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008686612648565b610a7985858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126a692505050565b610a7985858585856115b9565b8234146118cb57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4c315374616e646172644272696467653a206272696467696e6720455448206d60448201527f75737420696e636c7564652073756666696369656e74204554482076616c7565606482015260840161022a565b6118d785858584612719565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034837f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b8b8b8b8a60405160240161195794939291906134f0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b90921682526119eb9392918a90600401613539565b6000604051808303818588803b158015611a0457600080fd5b505af1158015611a18573d6000803e3d6000fd5b5050505050505050505050565b6000611a51827f1d1d8b630000000000000000000000000000000000000000000000000000000061278c565b80611a815750611a81827fec4fc8e30000000000000000000000000000000000000000000000000000000061278c565b92915050565b6000611ab3837f1d1d8b630000000000000000000000000000000000000000000000000000000061278c565b15611b5c578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b279190613417565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a81565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a679084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526127af565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cf393929190613585565b60405180910390a4610f4d8686868686866128bb565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d689291906135c3565b60405180910390a361059984848484612943565b600080600080845160208601878a8af19695505050505050565b610a7985858585855b611de173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016863086612648565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590526000917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf91906135dc565b905080611f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c315374616e646172644272696467653a20617070726f766520666f72204c3160448201527f204d4e54206661696c65642e0000000000000000000000000000000000000000606482015260840161022a565b611f5a868686856129b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034867f000000000000000000000000000000000000000000000000000000000000000063f407a99e60e01b8b8b8b8a60405160240161195794939291906134f0565b73ffffffffffffffffffffffffffffffffffffffff871615801590612027575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead111114155b6120b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c315374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f727420455448206272696467696e672e000000000000606482015260840161022a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612124575073ffffffffffffffffffffffffffffffffffffffff861615155b6121b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c315374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f7274204d4e54206272696467696e672e000000000000606482015260840161022a565b6121b987611a25565b15612307576121c88787611a87565b61227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156122ea57600080fd5b505af11580156122fe573d6000803e3d6000fd5b5050505061239b565b61232973ffffffffffffffffffffffffffffffffffffffff8816863086612648565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546123679084906135fe565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b6123a9878787878786612a23565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e300827f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8b8d8c8c8c8b60405160240161242c96959493929190613616565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526124c09392918990600401613539565b600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b505050505050505050505050565b60608160000361253f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612569578061255381613671565b91506125629050600a836136d8565b9150612543565b60008167ffffffffffffffff811115612584576125846136ec565b6040519080825280601f01601f1916602001820160405280156125ae576020820181803683370190505b5090505b8415612631576125c3600183613463565b91506125d0600a8661371b565b6125db9060306135fe565b60f81b8183815181106125f0576125f061372f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061262a600a866136d8565b94506125b2565b949350505050565b61098c87878787878787611fd8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105999085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bf9565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd140b1626a1caf5ae4717fcfdace5983543949ab0d32ceb0ca635c3913983e2884846040516127059291906135c3565b60405180910390a361059984848484612ab1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516127789291906135c3565b60405180910390a361059984848484612b10565b600061279783612b6f565b80156127a857506127a88383612bd3565b9392505050565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ca29092919063ffffffff16565b805190915015610a67578080602001905181019061282f91906135dc565b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161293393929190613585565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516129a29291906135c3565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f321b860de8dcec5080cae77af335971688a4c0bc3d79d6cf3d6f2cc3894798bc8484604051612a0f9291906135c3565b60405180910390a361059984848484612cb1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396868686604051612a9b93929190613585565b60405180910390a4610f4d868686868686612d10565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fef2dd684d0d947aa195ea84c18e3b5c457d3462c09eb29b20aac4f7d4d4f003584846040516129a29291906135c3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516129a29291906135c3565b6000612b9b827f01ffc9a700000000000000000000000000000000000000000000000000000000612bd3565b8015611a815750612bcc827fffffffff00000000000000000000000000000000000000000000000000000000612bd3565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612c8b575060208210155b8015612c975750600081115b979650505050505050565b60606126318484600085612d88565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f74bbfec0d26a17c2367408038090a9a4e1cd1671129dc8fdf57f146a499fe3d584846040516129a29291906135c3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161293393929190613585565b606082471015612e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b612e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ec1919061375e565b60006040518083038185875af1925050503d8060008114612efe576040519150601f19603f3d011682016040523d82523d6000602084013e612f03565b606091505b5091509150612c9782828660608315612f1d5750816127a8565b825115612f2d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a91906132e1565b73ffffffffffffffffffffffffffffffffffffffff81168114612f8357600080fd5b50565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600080600080600060c0888a031215612fea57600080fd5b8735612ff581612f61565b9650602088013561300581612f61565b9550604088013561301581612f61565b9450606088013561302581612f61565b93506080880135925060a088013567ffffffffffffffff81111561304857600080fd5b6130548a828b01612f86565b989b979a50959850939692959293505050565b803563ffffffff8116811461307b57600080fd5b919050565b60008060006040848603121561309557600080fd5b61309e84613067565b9250602084013567ffffffffffffffff8111156130ba57600080fd5b6130c686828701612f86565b9497909650939450505050565b6000806000806000608086880312156130eb57600080fd5b85356130f681612f61565b9450602086013561310681612f61565b935060408601359250606086013567ffffffffffffffff81111561312957600080fd5b61313588828901612f86565b969995985093965092949392505050565b6000806000806060858703121561315c57600080fd5b8435935061316c60208601613067565b9250604085013567ffffffffffffffff81111561318857600080fd5b61319487828801612f86565b95989497509550505050565b6000806000806000608086880312156131b857600080fd5b8535945060208601356131ca81612f61565b93506131d860408701613067565b9250606086013567ffffffffffffffff81111561312957600080fd5b600080600080600080600060c0888a03121561320f57600080fd5b873561321a81612f61565b9650602088013561322a81612f61565b9550604088013561323a81612f61565b94506060880135935061324f60808901613067565b925060a088013567ffffffffffffffff81111561304857600080fd5b60005b8381101561328657818101518382015260200161326e565b838111156105995750506000910152565b600081518084526132af81602086016020860161326b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127a86020830184613297565b60008060008060008060a0878903121561330d57600080fd5b863561331881612f61565b9550602087013561332881612f61565b94506040870135935061333d60608801613067565b9250608087013567ffffffffffffffff81111561335957600080fd5b61336589828a01612f86565b979a9699509497509295939492505050565b60008060008060006080868803121561338f57600080fd5b853561339a81612f61565b9450602086013593506131d860408701613067565b600080604083850312156133c257600080fd5b82356133cd81612f61565b915060208301356133dd81612f61565b809150509250929050565b600080600080606085870312156133fe57600080fd5b843561340981612f61565b935061316c60208601613067565b60006020828403121561342957600080fd5b81516127a881612f61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561347557613475613434565b500390565b6000845161348c81846020890161326b565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516134c8816001850160208a0161326b565b600192019182015283516134e381600284016020880161326b565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261352f6080830184613297565b9695505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260806040820152600061356e6080830185613297565b905063ffffffff8316606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006135ba6060830184613297565b95945050505050565b8281526040602082015260006126316040830184613297565b6000602082840312156135ee57600080fd5b815180151581146127a857600080fd5b6000821982111561361157613611613434565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261366560c0830184613297565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a2576136a2613434565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136e7576136e76136a9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261372a5761372a6136a9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825161377081846020870161326b565b919091019291505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b506040516200395f3803806200395f83398101604081905262000035916200008f565b7342000000000000000000000000000000000000076080526001600160a01b0391821660a052600160c081905260e0526000610100521661012052620000ce565b6001600160a01b03811681146200008c57600080fd5b50565b60008060408385031215620000a357600080fd5b8251620000b08162000076565b6020840151909250620000c38162000076565b809150509250929050565b60805160a05160c05160e05161010051610120516137a0620001bf6000396000818161046d015281816111b1015281816118fd0152818161216f01526126fb0152600061111d015260006110f4015260006110cb0152600081816102820152818161038c0152818161057f015281816106cd01528181610b9b0152818161141a01528181611d7301526124830152600081816102db0152818161042601528181610541015281816106a30152818161070401528181610b7101528181610bd201528181610dd0015281816113f001528181611451015281816116de01528181611d35015261244501526137a06000f3fe6080604052600436106101485760003560e01c806354fd4d50116100c05780638f601f6611610074578063a3a7954811610059578063a3a7954814610448578063ac6986c51461045b578063f407a99e1461048f57600080fd5b80638f601f66146103ce578063927ede2d1461041457600080fd5b8063662a633a116100a5578063662a633a146103675780637f46ddb21461037a57806387087623146103ae57600080fd5b806354fd4d501461033257806357eccc341461035457600080fd5b806332b7006d116101175780633cb747bf116100fc5780633cb747bf146102cc578063540abf73146102ff578063548e0a5c1461031f57600080fd5b806332b7006d1461026057806336c717c11461027357600080fd5b80630166a07a14610207578063162f1686146102275780631635f5fd1461023a57806324ca60181461024d57600080fd5b3661020257333b156101e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61020033333462030d40604051806020016040528060008152506104a2565b005b600080fd5b34801561021357600080fd5b50610200610222366004612fe8565b61068b565b610200610235366004613099565b610a81565b6102006102483660046130f3565b610b59565b61020061025b366004613166565b610f26565b61020061026e3660046131ba565b610f69565b34801561027f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102d857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102a2565b34801561030b57600080fd5b5061020061031a3660046131f2565b61103c565b61020061032d366004613269565b611081565b34801561033e57600080fd5b506103476110c4565b6040516102c3919061330e565b610200610362366004613321565b611167565b610200610375366004612fe8565b6111af565b34801561038657600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506102006103c9366004613374565b6112b8565b3480156103da57600080fd5b506104066103e93660046133f7565b600360209081526000928352604080842090915290825290205481565b6040519081526020016102c3565b34801561042057600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b610200610456366004613374565b611394565b34801561046757600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b61020061049d3660046130f3565b6113d8565b823414610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e67204d4e54206d757360448201527f7420696e636c7564652073756666696369656e74204d4e542076616c7565000060648201526084016101d8565b61053d858585846118cc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034837f000000000000000000000000000000000000000000000000000000000000000063f407a99e60e01b8b8b8b8a6040516024016105bd9493929190613430565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b90921682526106519392918a90600401613479565b6000604051808303818588803b15801561066a57600080fd5b505af115801561067e573d6000803e3d6000fd5b5050505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156107a957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079191906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b61085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b61086487611979565b156109b25761087387876119db565b610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101d8565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099557600080fd5b505af11580156109a9573d6000803e3d6000fd5b50505050610a34565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546109f0908490613511565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c1683529390529190912091909155610a34908585611afb565b610a78878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcf92505050565b50505050505050565b333b15610b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b610b533333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5d92505050565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610c7757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f91906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b610d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b3073ffffffffffffffffffffffffffffffffffffffff851603610dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101d8565b610edd73deaddeaddeaddeaddeaddeaddeaddeaddead11117342000000000000000000000000000000000000078686611e7e565b610f1f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611edc92505050565b5050505050565b610f1f3385878686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5d92505050565b333b15610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b610f1f853333878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f7d92505050565b610a7887873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061207292505050565b610b533385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104a292505050565b60606110ef7f0000000000000000000000000000000000000000000000000000000000000000612573565b6111187f0000000000000000000000000000000000000000000000000000000000000000612573565b6111417f0000000000000000000000000000000000000000000000000000000000000000612573565b60405160200161115393929190613528565b604051602081830303815290604052905090565b6111aa3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104a292505050565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611233575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b1561124a5761124585858585856113d8565b610a78565b73ffffffffffffffffffffffffffffffffffffffff8716158015611297575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead1111145b156112a9576112458585858585610b59565b610a788688878787878761068b565b333b15611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b61138c86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061207292505050565b505050505050565b61138c863387878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f7d92505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156114f657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de91906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b823414611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101d8565b3073ffffffffffffffffffffffffffffffffffffffff8516036116dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101d8565b60006117fb855a8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126b092505050565b90508061188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a204d4e54207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b61138c86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126ca92505050565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516119659392919061359e565b60405180910390a4610b5384848484612777565b60006119a5827f1d1d8b63000000000000000000000000000000000000000000000000000000006127e4565b806119d557506119d5827fec4fc8e3000000000000000000000000000000000000000000000000000000006127e4565b92915050565b6000611a07837f1d1d8b63000000000000000000000000000000000000000000000000000000006127e4565b15611ab0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b91906134c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161490506119d5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526111aa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612807565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611c479392919061359e565b60405180910390a461138c868686868686612913565b611c7d73deaddeaddeaddeaddeaddeaddeaddeaddead1111333086611e7e565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000760048201526024810184905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af1158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2691906135dc565b50611d338585858461299b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034857f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b8a8a8a89604051602401611db19493929190613430565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b9092168252611e459392918990600401613479565b6000604051808303818588803b158015611e5e57600080fd5b505af1158015611e72573d6000803e3d6000fd5b50505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610b539085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b4d565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead111173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611f699392919061359e565b60405180910390a4610b5384848484612a3c565b7fffffffffffffffffffffffff215221522152215221522152215221522152eeef73ffffffffffffffffffffffffffffffffffffffff871601611fcc57611fc78585858585611c5d565b61138c565b73ffffffffffffffffffffffffffffffffffffffff8616611ff457611fc785858585856104a2565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612041573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206591906134c5565b9050610a78878288888888885b73ffffffffffffffffffffffffffffffffffffffff871673deaddeaddeaddeaddeaddeaddeaddeaddead1111148015906120c1575073ffffffffffffffffffffffffffffffffffffffff861615155b61214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c325374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f727420455448206272696467696e672e00000000000060648201526084016101d8565b73ffffffffffffffffffffffffffffffffffffffff8716158015906121be57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b61224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c325374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f7274204d4e54206272696467696e672e00000000000060648201526084016101d8565b61225387611979565b156123a15761226287876119db565b612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101d8565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b50505050612435565b6123c373ffffffffffffffffffffffffffffffffffffffff8816863086611e7e565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546124019084906135fe565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b612443878787878786612a9b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30060007f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8a8c8b8b8b8a6040516024016124c596959493929190613616565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526125599392918890600401613479565b600060405180830381600087803b15801561066a57600080fd5b6060816000036125b657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156125e057806125ca81613671565b91506125d99050600a836136d8565b91506125ba565b60008167ffffffffffffffff8111156125fb576125fb6136ec565b6040519080825280601f01601f191660200182016040528015612625576020820181803683370190505b5090505b84156126a85761263a600183613511565b9150612647600a8661371b565b6126529060306135fe565b60f81b8183815181106126675761266761372f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126a1600a866136d8565b9450612629565b949350505050565b600080600080845160208601878a8af19695505050505050565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898686866040516127639392919061359e565b60405180910390a4610b5384848484612b29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f74bbfec0d26a17c2367408038090a9a4e1cd1671129dc8fdf57f146a499fe3d584846040516127d692919061375e565b60405180910390a350505050565b60006127ef83612b88565b801561280057506128008383612bec565b9392505050565b6000612869826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cbb9092919063ffffffff16565b8051909150156111aa578080602001905181019061288791906135dc565b6111aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101d8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161298b9392919061359e565b60405180910390a4505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead111173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051612a289392919061359e565b60405180910390a4610b5384848484612cca565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516127d692919061375e565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051612b139392919061359e565b60405180910390a461138c868686868686612d29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fef2dd684d0d947aa195ea84c18e3b5c457d3462c09eb29b20aac4f7d4d4f003584846040516127d692919061375e565b6000612bb4827f01ffc9a700000000000000000000000000000000000000000000000000000000612bec565b80156119d55750612be5827fffffffff00000000000000000000000000000000000000000000000000000000612bec565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612ca4575060208210155b8015612cb05750600081115b979650505050505050565b60606126a88484600085612da1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516127d692919061375e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161298b9392919061359e565b606082471015612e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101d8565b73ffffffffffffffffffffffffffffffffffffffff85163b612eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612eda9190613777565b60006040518083038185875af1925050503d8060008114612f17576040519150601f19603f3d011682016040523d82523d6000602084013e612f1c565b606091505b5091509150612cb082828660608315612f36575081612800565b825115612f465782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d8919061330e565b73ffffffffffffffffffffffffffffffffffffffff81168114612f9c57600080fd5b50565b60008083601f840112612fb157600080fd5b50813567ffffffffffffffff811115612fc957600080fd5b602083019150836020828501011115612fe157600080fd5b9250929050565b600080600080600080600060c0888a03121561300357600080fd5b873561300e81612f7a565b9650602088013561301e81612f7a565b9550604088013561302e81612f7a565b9450606088013561303e81612f7a565b93506080880135925060a088013567ffffffffffffffff81111561306157600080fd5b61306d8a828b01612f9f565b989b979a50959850939692959293505050565b803563ffffffff8116811461309457600080fd5b919050565b600080600080606085870312156130af57600080fd5b843593506130bf60208601613080565b9250604085013567ffffffffffffffff8111156130db57600080fd5b6130e787828801612f9f565b95989497509550505050565b60008060008060006080868803121561310b57600080fd5b853561311681612f7a565b9450602086013561312681612f7a565b935060408601359250606086013567ffffffffffffffff81111561314957600080fd5b61315588828901612f9f565b969995985093965092949392505050565b60008060008060006080868803121561317e57600080fd5b85359450602086013561319081612f7a565b935061319e60408701613080565b9250606086013567ffffffffffffffff81111561314957600080fd5b6000806000806000608086880312156131d257600080fd5b85356131dd81612f7a565b94506020860135935061319e60408701613080565b600080600080600080600060c0888a03121561320d57600080fd5b873561321881612f7a565b9650602088013561322881612f7a565b9550604088013561323881612f7a565b94506060880135935061324d60808901613080565b925060a088013567ffffffffffffffff81111561306157600080fd5b6000806000806060858703121561327f57600080fd5b843561328a81612f7a565b93506130bf60208601613080565b60005b838110156132b357818101518382015260200161329b565b83811115610b535750506000910152565b600081518084526132dc816020860160208601613298565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061280060208301846132c4565b60008060006040848603121561333657600080fd5b61333f84613080565b9250602084013567ffffffffffffffff81111561335b57600080fd5b61336786828701612f9f565b9497909650939450505050565b60008060008060008060a0878903121561338d57600080fd5b863561339881612f7a565b955060208701356133a881612f7a565b9450604087013593506133bd60608801613080565b9250608087013567ffffffffffffffff8111156133d957600080fd5b6133e589828a01612f9f565b979a9699509497509295939492505050565b6000806040838503121561340a57600080fd5b823561341581612f7a565b9150602083013561342581612f7a565b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261346f60808301846132c4565b9695505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff841660208201526080604082015260006134ae60808301856132c4565b905063ffffffff8316606083015295945050505050565b6000602082840312156134d757600080fd5b815161280081612f7a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613523576135236134e2565b500390565b6000845161353a818460208901613298565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613576816001850160208a01613298565b60019201918201528351613591816002840160208801613298565b0160020195945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006135d360608301846132c4565b95945050505050565b6000602082840312156135ee57600080fd5b8151801515811461280057600080fd5b60008219821115613611576136116134e2565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261366560c08301846132c4565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a2576136a26134e2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136e7576136e76136a9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261372a5761372a6136a9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8281526040602082015260006126a860408301846132c4565b60008251613789818460208701613298565b919091019291505056fea164736f6c634300080f000a61010060405234801561001157600080fd5b5060405161243538038061243583398101604081905261003091610050565b6001608081905260a052600060c0526001600160a01b031660e052610080565b60006020828403121561006257600080fd5b81516001600160a01b038116811461007957600080fd5b9392505050565b60805160a05160c05160e0516123776100be6000396000818160d3015261026501526000610153015260006101280152600060fd01526123776000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c806354fd4d501462000057578063896f93d11462000079578063ce5ac90f14620000b6578063ee9a31a214620000cd575b600080fd5b62000061620000f5565b60405162000070919062000550565b60405180910390f35b620000906200008a3660046200064e565b620001a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000070565b62000090620000c73660046200064e565b620001b7565b620000907f000000000000000000000000000000000000000000000000000000000000000081565b6060620001227f000000000000000000000000000000000000000000000000000000000000000062000376565b6200014d7f000000000000000000000000000000000000000000000000000000000000000062000376565b620001787f000000000000000000000000000000000000000000000000000000000000000062000376565b6040516020016200018c93929190620006e5565b604051602081830303815290604052905090565b6000620001af848484620001b7565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff841662000261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e206164647265737300606482015260840160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008585856040516200029590620004c3565b620002a4949392919062000761565b604051809103906000f080158015620002c1573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80871691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a3949350505050565b606081600003620003ba57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115620003ea5780620003d181620007ea565b9150620003e29050600a8362000854565b9150620003be565b60008167ffffffffffffffff8111156200040857620004086200056c565b6040519080825280601f01601f19166020018201604052801562000433576020820181803683370190505b5090505b8415620001af576200044b6001836200086b565b91506200045a600a8662000885565b620004679060306200089c565b60f81b8183815181106200047f576200047f620008b7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350620004bb600a8662000854565b945062000437565b611a8480620008e783390190565b60005b83811015620004ee578181015183820152602001620004d4565b83811115620004fe576000848401525b50505050565b600081518084526200051e816020860160208601620004d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062000565602083018462000504565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620005ad57600080fd5b813567ffffffffffffffff80821115620005cb57620005cb6200056c565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156200061457620006146200056c565b816040528381528660208588010111156200062e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200066457600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146200068957600080fd5b9250602084013567ffffffffffffffff80821115620006a757600080fd5b620006b5878388016200059b565b93506040860135915080821115620006cc57600080fd5b50620006db868287016200059b565b9150509250925092565b60008451620006f9818460208901620004d1565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855162000737816001850160208a01620004d1565b6001920191820152835162000754816002840160208801620004d1565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526200079c608083018562000504565b8281036060840152620007b0818562000504565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200081e576200081e620007bb565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262000866576200086662000825565b500490565b600082821015620008805762000880620007bb565b500390565b60008262000897576200089762000825565b500690565b60008219821115620008b257620008b2620007bb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe6101206040523480156200001257600080fd5b5060405162001a8438038062001a8483398101604081905262000035916200016d565b6001600080848460036200004a83826200028c565b5060046200005982826200028c565b50505060809290925260a05260c05250506001600160a01b0390811660e052166101005262000358565b80516001600160a01b03811681146200009b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000c857600080fd5b81516001600160401b0380821115620000e557620000e5620000a0565b604051601f8301601f19908116603f01168101908282118183101715620001105762000110620000a0565b816040528381526020925086838588010111156200012d57600080fd5b600091505b8382101562000151578582018301518183018401529082019062000132565b83821115620001635760008385830101525b9695505050505050565b600080600080608085870312156200018457600080fd5b6200018f8562000083565b93506200019f6020860162000083565b60408601519093506001600160401b0380821115620001bd57600080fd5b620001cb88838901620000b6565b93506060870151915080821115620001e257600080fd5b50620001f187828801620000b6565b91505092959194509250565b600181811c908216806200021257607f821691505b6020821081036200023357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028757600081815260208120601f850160051c81016020861015620002625750805b601f850160051c820191505b8181101562000283578281556001016200026e565b5050505b505050565b81516001600160401b03811115620002a857620002a8620000a0565b620002c081620002b98454620001fd565b8462000239565b602080601f831160018114620002f85760008415620002df5750858301515b600019600386901b1c1916600185901b17855562000283565b600085815260208120601f198616915b82811015620003295788860151825594840194600190910190840162000308565b5085821015620003485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516116cb620003b9600039600081816102f50152818161038a015281816105cf01526107a90152600081816101a9015261031b015260006107380152600061070f015260006106e601526116cb6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e1461033f578063e78cea92146102f3578063ee9a31a21461038557600080fd5b8063ae1f6aaf146102f3578063c01e1bd614610319578063d6c0b2c41461031957600080fd5b80639dc29fac116100bd5780639dc29fac146102ba578063a457c2d7146102cd578063a9059cbb146102e057600080fd5b806370a082311461027c57806395d89b41146102b257600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611307565b6103ac565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861049d565b60405161019b919061137c565b61018f6102133660046113f6565b61052f565b6002545b60405190815260200161019b565b61018f610238366004611420565b610547565b6040516012815260200161019b565b61018f61025a3660046113f6565b61056b565b61027261026d3660046113f6565b6105b7565b005b6101f86106df565b61021c61028a36600461145c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610782565b6102726102c83660046113f6565b610791565b61018f6102db3660046113f6565b6108a8565b61018f6102ee3660046113f6565b610979565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61034d366004611477565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061046557507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061049457507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ac906114aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104d8906114aa565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b60003361053d818585610987565b5060019392505050565b600033610555858285610b3b565b610560858585610c12565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061053d90829086906105b290879061152c565b610987565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b61068b8282610ec5565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106d391815260200190565b60405180910390a25050565b606061070a7f0000000000000000000000000000000000000000000000000000000000000000610fe5565b6107337f0000000000000000000000000000000000000000000000000000000000000000610fe5565b61075c7f0000000000000000000000000000000000000000000000000000000000000000610fe5565b60405160200161076e93929190611544565b604051602081830303815290604052905090565b6060600480546104ac906114aa565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e0000000000000000000000006064820152608401610678565b6108608282611122565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106d391815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610678565b6105608286868403610987565b60003361053d818585610c12565b73ffffffffffffffffffffffffffffffffffffffff8316610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff8216610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c0c5781811015610bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610678565b610c0c8484848403610987565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff8216610d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e5290849061152c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb891815260200190565b60405180910390a3610c0c565b73ffffffffffffffffffffffffffffffffffffffff8216610f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610678565b8060026000828254610f54919061152c565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f8e90849061152c565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361102857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611052578061103c816115ba565b915061104b9050600a83611621565b915061102c565b60008167ffffffffffffffff81111561106d5761106d611635565b6040519080825280601f01601f191660200182016040528015611097576020820181803683370190505b5090505b841561111a576110ac600183611664565b91506110b9600a8661167b565b6110c490603061152c565b60f81b8183815181106110d9576110d961168f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611113600a86611621565b945061109b565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112b7908490611664565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b2e565b60006020828403121561131957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461134957600080fd5b9392505050565b60005b8381101561136b578181015183820152602001611353565b83811115610c0c5750506000910152565b602081526000825180602084015261139b816040850160208701611350565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113f157600080fd5b919050565b6000806040838503121561140957600080fd5b611412836113cd565b946020939093013593505050565b60008060006060848603121561143557600080fd5b61143e846113cd565b925061144c602085016113cd565b9150604084013590509250925092565b60006020828403121561146e57600080fd5b611349826113cd565b6000806040838503121561148a57600080fd5b611493836113cd565b91506114a1602084016113cd565b90509250929050565b600181811c908216806114be57607f821691505b6020821081036114f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561153f5761153f6114fd565b500190565b60008451611556818460208901611350565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611592816001850160208a01611350565b600192019182015283516115ad816002840160208801611350565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115eb576115eb6114fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611630576116306115f2565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015611676576116766114fd565b500390565b60008261168a5761168a6115f2565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a6101206040523480156200001257600080fd5b506040516200112b3803806200112b8339810160408190526200003591620000de565b734200000000000000000000000000000000000010816040518060400160405280600c81526020016b26b0b73a3632902a37b5b2b760a11b8152506040518060400160405280600381526020016213539560ea1b815250600160008084848160039081620000a49190620001b5565b506004620000b38282620001b5565b50505060809290925260a05260c05250506001600160a01b0390811660e05216610100525062000281565b600060208284031215620000f157600080fd5b81516001600160a01b03811681146200010957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013b57607f821691505b6020821081036200015c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001b057600081815260208120601f850160051c810160208610156200018b5750805b601f850160051c820191505b81811015620001ac5782815560010162000197565b5050505b505050565b81516001600160401b03811115620001d157620001d162000110565b620001e981620001e2845462000126565b8462000162565b602080601f831160018114620002215760008415620002085750858301515b600019600386901b1c1916600185901b178555620001ac565b600085815260208120601f198616915b82811015620002525788860151825594840194600190910190840162000231565b5085821015620002715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610e57620002d4600039600081816102e7015261037c0152600081816101a9015261030d0152600061078201526000610759015260006107300152610e576000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610331578063e78cea92146102e5578063ee9a31a21461037757600080fd5b8063ae1f6aaf146102e5578063c01e1bd61461030b578063d6c0b2c41461030b57600080fd5b80639dc29fac116100bd5780639dc29fac146102ac578063a457c2d7146102bf578063a9059cbb146102d257600080fd5b806370a082311461027c57806395d89b41146102a457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004610a8f565b61039e565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861048f565b60405161019b9190610b08565b61018f610213366004610b82565b610521565b6002545b60405190815260200161019b565b61018f610238366004610bac565b6105b1565b6040516012815260200161019b565b61018f61025a366004610b82565b61063c565b61027261026d366004610b82565b6106c7565b005b6101f8610729565b61021c61028a366004610be8565b73ffffffffffffffffffffffffffffffffffffffff163190565b6101f86107cc565b6102726102ba366004610b82565b6107db565b61018f6102cd366004610b82565b61083d565b61018f6102e0366004610b82565b6108c8565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61033f366004610c03565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061045757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061048657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461049e90610c36565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90610c36565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c656761637945524332304d4e543a20617070726f766520697320646973616260448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526000906084015b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c656761637945524332304d4e543a207472616e7366657246726f6d2069732060448201527f64697361626c656400000000000000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304d4e543a20696e637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304d4e543a206d696e742069732064697361626c656460448201526064016105a8565b60606107547f0000000000000000000000000000000000000000000000000000000000000000610952565b61077d7f0000000000000000000000000000000000000000000000000000000000000000610952565b6107a67f0000000000000000000000000000000000000000000000000000000000000000610952565b6040516020016107b893929190610c89565b604051602081830303815290604052905090565b60606004805461049e90610c36565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304d4e543a206275726e2069732064697361626c656460448201526064016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304d4e543a206465637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c656761637945524332304d4e543a207472616e73666572206973206469736160448201527f626c65640000000000000000000000000000000000000000000000000000000060648201526000906084016105a8565b60608160000361099557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156109bf57806109a981610d2e565b91506109b89050600a83610d95565b9150610999565b60008167ffffffffffffffff8111156109da576109da610da9565b6040519080825280601f01601f191660200182016040528015610a04576020820181803683370190505b5090505b8415610a8757610a19600183610dd8565b9150610a26600a86610def565b610a31906030610e03565b60f81b818381518110610a4657610a46610e1b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610a80600a86610d95565b9450610a08565b949350505050565b600060208284031215610aa157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ad157600080fd5b9392505050565b60005b83811015610af3578181015183820152602001610adb565b83811115610b02576000848401525b50505050565b6020815260008251806020840152610b27816040850160208701610ad8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7d57600080fd5b919050565b60008060408385031215610b9557600080fd5b610b9e83610b59565b946020939093013593505050565b600080600060608486031215610bc157600080fd5b610bca84610b59565b9250610bd860208501610b59565b9150604084013590509250925092565b600060208284031215610bfa57600080fd5b610ad182610b59565b60008060408385031215610c1657600080fd5b610c1f83610b59565b9150610c2d60208401610b59565b90509250929050565b600181811c90821680610c4a57607f821691505b602082108103610c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008451610c9b818460208901610ad8565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610cd7816001850160208a01610ad8565b60019201918201528351610cf2816002840160208801610ad8565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d5f57610d5f610cff565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610da457610da4610d66565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610dea57610dea610cff565b500390565b600082610dfe57610dfe610d66565b500690565b60008219821115610e1657610e16610cff565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a60806040523480156200001157600080fd5b5060405162000e3c38038062000e3c833981016040819052620000349162000127565b600362000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610b4080620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e3919061094a565b60405180910390f35b6100ff6100fa3660046109e6565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f366004610a10565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109e6565b6102ce565b610113610164366004610a4c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109e6565b610329565b6100ff6101b53660046109e6565b6103ff565b6101136101c8366004610a6e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610aa1565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610af4565b61040d565b60606004805461020f90610aa1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108d7908490610af4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161093d91815260200190565b60405180910390a3610691565b600060208083528351808285015260005b818110156109775785810183015185820160400152820161095b565b81811115610989576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109e157600080fd5b919050565b600080604083850312156109f957600080fd5b610a02836109bd565b946020939093013593505050565b600080600060608486031215610a2557600080fd5b610a2e846109bd565b9250610a3c602085016109bd565b9150604084013590509250925092565b600060208284031215610a5e57600080fd5b610a67826109bd565b9392505050565b60008060408385031215610a8157600080fd5b610a8a836109bd565b9150610a98602084016109bd565b90509250929050565b600181811c90821680610ab557607f821691505b602082108103610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a60806040523480156200001157600080fd5b506040516200156038038062001560833981016040819052620000349162000179565b8181600362000044838262000298565b50600462000053828262000298565b5050600580546001600160a01b039586166001600160a01b03199182161790915560068054969095169516949094179092555062000364915050565b80516001600160a01b0381168114620000a757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d457600080fd5b81516001600160401b0380821115620000f157620000f1620000ac565b604051601f8301601f19908116603f011681019082821181831017156200011c576200011c620000ac565b816040528381526020925086838588010111156200013957600080fd5b600091505b838210156200015d57858201830151818301840152908201906200013e565b838211156200016f5760008385830101525b9695505050505050565b600080600080608085870312156200019057600080fd5b6200019b856200008f565b9350620001ab602086016200008f565b60408601519093506001600160401b0380821115620001c957600080fd5b620001d788838901620000c2565b93506060870151915080821115620001ee57600080fd5b50620001fd87828801620000c2565b91505092959194509250565b600181811c908216806200021e57607f821691505b6020821081036200023f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029357600081815260208120601f850160051c810160208610156200026e5750805b601f850160051c820191505b818110156200028f578281556001016200027a565b5050505b505050565b81516001600160401b03811115620002b457620002b4620000ac565b620002cc81620002c5845462000209565b8462000245565b602080601f831160018114620003045760008415620002eb5750858301515b600019600386901b1c1916600185901b1785556200028f565b600085815260208120601f198616915b82811015620003355788860151825594840194600190910190840162000314565b5085821015620003545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6111ec80620003746000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610215578063ae1f6aaf14610228578063c01e1bd61461026d578063dd62ed3e1461028d57600080fd5b806370a08231146101b157806395d89b41146101e75780639dc29fac146101ef578063a457c2d71461020257600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610f95565b6102d3565b60405190151581526020015b60405180910390f35b610135610393565b6040516101249190610fde565b61011861015036600461107a565b610425565b6002545b604051908152602001610124565b6101186101753660046110a4565b61043d565b60405160128152602001610124565b61011861019736600461107a565b610461565b6101af6101aa36600461107a565b6104ad565b005b6101596101bf3660046110e0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610135610591565b6101af6101fd36600461107a565b6105a0565b61011861021036600461107a565b610673565b61011861022336600461107a565b610744565b6006546102489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b6005546102489073ffffffffffffffffffffffffffffffffffffffff1681565b61015961029b3660046110fb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a700000000000000000000000000000000000000000000000000000000148061038b57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103a29061112e565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce9061112e565b801561041b5780601f106103f05761010080835404028352916020019161041b565b820191906000526020600020905b8154815290600101906020018083116103fe57829003601f168201915b5050505050905090565b600033610433818585610752565b5060019392505050565b60003361044b858285610906565b6104568585856109dd565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061043390829086906104a89087906111b0565b610752565b60065473ffffffffffffffffffffffffffffffffffffffff163314610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064015b60405180910390fd5b61053d8282610c90565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161058591815260200190565b60405180910390a25050565b6060600480546103a29061112e565b60065473ffffffffffffffffffffffffffffffffffffffff163314610621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161052a565b61062b8282610db0565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161058591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6104568286868403610752565b6000336104338185856109dd565b73ffffffffffffffffffffffffffffffffffffffff83166107f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109d757818110156109ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161052a565b6109d78484848403610752565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c1d9084906111b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8391815260200190565b60405180910390a36109d7565b73ffffffffffffffffffffffffffffffffffffffff8216610d0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610d1f91906111b0565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d599084906111b0565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610f459084906111c8565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016108f9565b600060208284031215610fa757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fd757600080fd5b9392505050565b600060208083528351808285015260005b8181101561100b57858101830151858201604001528201610fef565b8181111561101d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461107557600080fd5b919050565b6000806040838503121561108d57600080fd5b61109683611051565b946020939093013593505050565b6000806000606084860312156110b957600080fd5b6110c284611051565b92506110d060208501611051565b9150604084013590509250925092565b6000602082840312156110f257600080fd5b610fd782611051565b6000806040838503121561110e57600080fd5b61111783611051565b915061112560208401611051565b90509250929050565b600181811c9082168061114257607f821691505b60208210810361117b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156111c3576111c3611181565b500190565b6000828210156111da576111da611181565b50039056fea164736f6c634300080f000a608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105ef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b50604051620029cf380380620029cf83398101604081905262000035916200027a565b734200000000000000000000000000000000000007608052600160a052600460c052600060e0526001600160a01b03828116610100528116610120526200007b62000083565b5050620002b9565b600054600160a81b900460ff1615808015620000ac57506000546001600160a01b90910460ff16105b80620000e35750620000c930620001d060201b620015de1760201c565b158015620000e35750600054600160a01b900460ff166001145b6200014c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200017a576000805460ff60a81b1916600160a81b1790555b62000184620001df565b8015620001cd576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200024e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000143565b60cc80546001600160a01b03191661dead179055565b6001600160a01b0381168114620001cd57600080fd5b600080604083850312156200028e57600080fd5b82516200029b8162000264565b6020840151909250620002ae8162000264565b809150509250929050565b60805160a05160c05160e05161010051610120516126806200034f60003960008181610359015281816108720152818161090901526113210152600081816101be015281816108d7015281816118e8015281816119c001528181611a210152611aed015260006104af015260006104860152600061045d0152600081816102e501528181610a0f01526119ea01526126806000f3fe60806040526004361061015f5760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e300146103cb578063ecc70428146103de578063ff8daf151461044357600080fd5b8063b1b1b2091461037b578063b28ade25146103ab57600080fd5b80639fce812c116100a55780639fce812c146102d3578063a4e7f8bd14610307578063ac6986c51461034757600080fd5b806383a74074146102bc5780638cbeeef21461024257600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf1461027a5780636e296e45146102905780638129fc1c146102a557600080fd5b80634c1d6a691461024257806354fd4d501461025857600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633f827a5a1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b34801561022657600080fd5b5061022f600181565b60405161ffff909116815260200161018e565b34801561024e57600080fd5b50610179619c4081565b34801561026457600080fd5b5061026d610456565b60405161018e9190611f9d565b34801561028657600080fd5b5061017961138881565b34801561029c57600080fd5b506101e06104f9565b3480156102b157600080fd5b506102ba6105e5565b005b3480156102c857600080fd5b5061017962030d4081565b3480156102df57600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561031357600080fd5b50610337610322366004611fb0565b60ce6020526000908152604090205460ff1681565b604051901515815260200161018e565b34801561035357600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561038757600080fd5b50610337610396366004611fb0565b60cb6020526000908152604090205460ff1681565b3480156103b757600080fd5b506101796103c636600461202b565b6107e2565b6102ba6103d93660046120a1565b610852565b3480156103ea57600080fd5b5061043560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b60405190815260200161018e565b6102ba610451366004612112565b610c7a565b60606104817f00000000000000000000000000000000000000000000000000000000000000006115fa565b6104aa7f00000000000000000000000000000000000000000000000000000000000000006115fa565b6104d37f00000000000000000000000000000000000000000000000000000000000000006115fa565b6040516020016104e5939291906121a1565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016105c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff1615808015610630575060005460017401000000000000000000000000000000000000000090910460ff16105b806106625750303b158015610662575060005474010000000000000000000000000000000000000000900460ff166001145b6106ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105bf565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561077457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61077c611737565b80156107df57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107fe604063ffffffff8816612246565b61080891906122a5565b610813601088612246565b6108209062030d406122cc565b61082a91906122cc565b61083491906122cc565b61083e91906122cc565b61084891906122cc565b90505b9392505050565b8415610a095761089a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333088611810565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790526000917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906122f8565b905080610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f74686520617070726f766520666f72204c31206d6e7420746f204f7074696d6960448201527f736d506f7274616c206661696c6564000000000000000000000000000000000060648201526084016105bf565b505b610b44857f0000000000000000000000000000000000000000000000000000000000000000610a398686866107e2565b7fff8daf1500000000000000000000000000000000000000000000000000000000610aa460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a8c348a8d8d604051602401610ac2989796959493929190612363565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526118ab565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338585610bc960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610bdb9594939291906123c9565b60405180910390a26040805186815234602082015233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b905090565b60f088901c60028110610d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105bf565b8061ffff16600003610e37576000610d93888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d611962565b600081815260cb602052604090205490915060ff1615610e35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105bf565b505b6000610e7e8a8a8a8a8a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198192505050565b9050610e886119a6565b15610ec057853414610e9c57610e9c612417565b600081815260ce602052604090205460ff1615610ebb57610ebb612417565b611012565b3415610f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105bf565b600081815260ce602052604090205460ff16611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105bf565b61101b88611aca565b156110ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105bf565b600081815260cb602052604090205460ff161561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105bf565b61118e8561117f611388619c406122cc565b67ffffffffffffffff16611b41565b15806111b4575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156112cd57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105bf565b50506115d4565b60018715611391576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a90527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af115801561136a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138e91906122f8565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006114228a619c405a6113e59190612446565b8a89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5f92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080801561145a5750815b156114c257600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115cf565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105bf565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60608160000361163d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561166757806116518161245d565b91506116609050600a83612495565b9150611641565b60008167ffffffffffffffff811115611682576116826124a9565b6040519080825280601f01601f1916602001820160405280156116ac576020820181803683370190505b5090505b841561172f576116c1600183612446565b91506116ce600a866124d8565b6116d99060306124ec565b60f81b8183815181106116ee576116ee612504565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611728600a86612495565b94506116b0565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff166117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bf565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526118a5908590611b79565b50505050565b6040517f85945feb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385945feb90349061192a9088908890829089906000908a90600401612533565b6000604051808303818588803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505050505050565b600061197085858585611c8a565b805190602001209050949350505050565b600061199288888888888888611d23565b805190602001209050979650505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610c7557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190612592565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611b3b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000611bdb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611dc59092919063ffffffff16565b805190915015611c855780806020019051810190611bf991906122f8565b611c85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105bf565b505050565b606084848484604051602401611ca394939291906125af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611d4297969594939291906125f9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b606061084884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105bf565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611e779190612657565b60006040518083038185875af1925050503d8060008114611eb4576040519150601f19603f3d011682016040523d82523d6000602084013e611eb9565b606091505b5091509150611ec9828286611ed4565b979650505050505050565b60608315611ee357508161084b565b825115611ef35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bf9190611f9d565b60005b83811015611f42578181015183820152602001611f2a565b838111156118a55750506000910152565b60008151808452611f6b816020860160208601611f27565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061084b6020830184611f53565b600060208284031215611fc257600080fd5b5035919050565b60008083601f840112611fdb57600080fd5b50813567ffffffffffffffff811115611ff357600080fd5b60208301915083602082850101111561200b57600080fd5b9250929050565b803563ffffffff8116811461202657600080fd5b919050565b60008060006040848603121561204057600080fd5b833567ffffffffffffffff81111561205757600080fd5b61206386828701611fc9565b9094509250612076905060208501612012565b90509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146107df57600080fd5b6000806000806000608086880312156120b957600080fd5b8535945060208601356120cb8161207f565b9350604086013567ffffffffffffffff8111156120e757600080fd5b6120f388828901611fc9565b9094509250612106905060608701612012565b90509295509295909350565b60008060008060008060008060e0898b03121561212e57600080fd5b8835975060208901356121408161207f565b965060408901356121508161207f565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561218157600080fd5b61218d8b828c01611fc9565b999c989b5096995094979396929594505050565b600084516121b3818460208901611f27565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516121ef816001850160208a01611f27565b6001920191820152835161220a816002840160208801611f27565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561226d5761226d612217565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806122c0576122c0612276565b92169190910492915050565b600067ffffffffffffffff8083168185168083038211156122ef576122ef612217565b01949350505050565b60006020828403121561230a57600080fd5b8151801515811461084b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c08301526123bb60e08301848661231a565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006123f960808301868861231a565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561245857612458612217565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361248e5761248e612217565b5060010190565b6000826124a4576124a4612276565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826124e7576124e7612276565b500690565b600082198211156124ff576124ff612217565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b86815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015267ffffffffffffffff84166060820152821515608082015260c060a0820152600061258660c0830184611f53565b98975050505050505050565b6000602082840312156125a457600080fd5b815161084b8161207f565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526125e86080830185611f53565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261264a60e0830184611f53565b9998505050505050505050565b60008251612669818460208701611f27565b919091019291505056fea164736f6c634300080f000a608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a6101006040523480156200001257600080fd5b506040516200260938038062002609833981016040819052620000359162000243565b6001600160a01b038116608052600160a052600460c052600060e0526200005b62000062565b5062000275565b600054600160a81b900460ff16158080156200008b57506000546001600160a01b90910460ff16105b80620000c25750620000a830620001af60201b620014411760201c565b158015620000c25750600054600160a01b900460ff166001145b6200012b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b179055801562000159576000805460ff60a81b1916600160a81b1790555b62000163620001be565b8015620001ac576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200022d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000122565b60cc80546001600160a01b03191661dead179055565b6000602082840312156200025657600080fd5b81516001600160a01b03811681146200026e57600080fd5b9392505050565b60805160a05160c05160e051612345620002c4600039600061045f015260006104360152600061040d015260008181610296015281816103070152818161082e0152610cd701526123456000f3fe6080604052600436106101445760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e3001461037b578063ecc704281461038e578063ff8daf15146103f357600080fd5b8063b1b1b2091461032b578063b28ade251461035b57600080fd5b80639fce812c116100a55780639fce812c14610284578063a4e7f8bd146102b8578063a7119869146102f857600080fd5b806383a740741461026d5780638cbeeef2146101ce57600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf146102065780636e296e451461021c5780638129fc1c1461025657600080fd5b80634c1d6a69146101ce57806354fd4d50146101e457600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633f827a5a146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b3480156101b257600080fd5b506101bb600181565b60405161ffff9091168152602001610173565b3480156101da57600080fd5b5061015e619c4081565b3480156101f057600080fd5b506101f9610406565b6040516101739190611c93565b34801561021257600080fd5b5061015e61138881565b34801561022857600080fd5b506102316104a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561026257600080fd5b5061026b610595565b005b34801561027957600080fd5b5061015e62030d4081565b34801561029057600080fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c457600080fd5b506102e86102d3366004611ca6565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561030457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610231565b34801561033757600080fd5b506102e8610346366004611ca6565b60cb6020526000908152604090205460ff1681565b34801561036757600080fd5b5061015e610376366004611d21565b610792565b61026b610389366004611d99565b610802565b34801561039a57600080fd5b506103e560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61026b610401366004611e08565b610a95565b60606104317f000000000000000000000000000000000000000000000000000000000000000061145d565b61045a7f000000000000000000000000000000000000000000000000000000000000000061145d565b6104837f000000000000000000000000000000000000000000000000000000000000000061145d565b60405160200161049593929190611e93565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff16158080156105e0575060005460017401000000000000000000000000000000000000000090910460ff16105b806106125750303b158015610612575060005474010000000000000000000000000000000000000000900460ff166001145b61069e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161056f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561072457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61072c61159a565b801561078f57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107ae604063ffffffff8816611f38565b6107b89190611f97565b6107c3601088611f38565b6107d09062030d40611fbe565b6107da9190611fbe565b6107e49190611fbe565b6107ee9190611fbe565b6107f89190611fbe565b90505b9392505050565b84156108285761082873deaddeaddeaddeaddeaddeaddeaddeaddead1111333088611673565b610963857f0000000000000000000000000000000000000000000000000000000000000000610858868686610792565b7fff8daf15000000000000000000000000000000000000000000000000000000006108c360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a348d8a8d8d6040516024016108e1989796959493929190612033565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261170e565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856109e860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516109fa959493929190612099565b60405180910390a2604080513481526020810187905233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b60f088901c60028110610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161056f565b8061ffff16600003610c52576000610bae888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d61179e565b600081815260cb602052604090205490915060ff1615610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161056f565b505b6000610c998a8a8a8a8a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117bd92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610d3157863414610d0d57610d0d6120e7565b600081815260ce602052604090205460ff1615610d2c57610d2c6120e7565b610e83565b3415610de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161056f565b600081815260ce602052604090205460ff16610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161056f565b610e8c886117e2565b15610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161056f565b600081815260cb602052604090205460ff1615610fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161056f565b610fff85610ff0611388619c40611fbe565b67ffffffffffffffff16611837565b1580611025575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561113e57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b5050611437565b600186156111f4576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810188905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612116565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006112858a619c405a6112489190612138565b8b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061185592505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508080156112bd5750815b1561132557600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611432565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036114a057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114ca57806114b48161214f565b91506114c39050600a83612187565b91506114a4565b60008167ffffffffffffffff8111156114e5576114e561219b565b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b5090505b841561159257611524600183612138565b9150611531600a866121ca565b61153c9060306121de565b60f81b818381518110611551576115516121f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061158b600a86612187565b9450611513565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161056f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261170890859061186f565b50505050565b6040517f39fd0090000000000000000000000000000000000000000000000000000000008152734200000000000000000000000000000000000016906339fd0090903490611766908890889088908890600401612225565b6000604051808303818588803b15801561177f57600080fd5b505af1158015611793573d6000803e3d6000fd5b505050505050505050565b60006117ac85858585611980565b805190602001209050949350505050565b60006117ce88888888888888611a19565b805190602001209050979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611831575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60006118d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b80519091501561197b57808060200190518101906118ef9190612116565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056f565b505050565b6060848484846040516024016119999493929190612274565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611a3897969594939291906122be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b60606107f884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b6d919061231c565b60006040518083038185875af1925050503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bbf828286611bca565b979650505050505050565b60608315611bd95750816107fb565b825115611be95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9190611c93565b60005b83811015611c38578181015183820152602001611c20565b838111156117085750506000910152565b60008151808452611c61816020860160208601611c1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107fb6020830184611c49565b600060208284031215611cb857600080fd5b5035919050565b60008083601f840112611cd157600080fd5b50813567ffffffffffffffff811115611ce957600080fd5b602083019150836020828501011115611d0157600080fd5b9250929050565b803563ffffffff81168114611d1c57600080fd5b919050565b600080600060408486031215611d3657600080fd5b833567ffffffffffffffff811115611d4d57600080fd5b611d5986828701611cbf565b9094509250611d6c905060208501611d08565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff81168114611d1c57600080fd5b600080600080600060808688031215611db157600080fd5b85359450611dc160208701611d75565b9350604086013567ffffffffffffffff811115611ddd57600080fd5b611de988828901611cbf565b9094509250611dfc905060608701611d08565b90509295509295909350565b60008060008060008060008060e0898b031215611e2457600080fd5b88359750611e3460208a01611d75565b9650611e4260408a01611d75565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611e7357600080fd5b611e7f8b828c01611cbf565b999c989b5096995094979396929594505050565b60008451611ea5818460208901611c1d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611ee1816001850160208a01611c1d565b60019201918201528351611efc816002840160208801611c1d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f5f57611f5f611f09565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611fb257611fb2611f68565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fe157611fe1611f09565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c083015261208b60e083018486611fea565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c9608083018688611fea565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121561212857600080fd5b815180151581146107fb57600080fd5b60008282101561214a5761214a611f09565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361218057612180611f09565b5060010190565b60008261219657612196611f68565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826121d9576121d9611f68565b500690565b600082198211156121f1576121f1611f09565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316604082015260806060820152600061226a6080830184611c49565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526122ad6080830185611c49565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261230f60e0830184611c49565b9998505050505050505050565b6000825161232e818460208701611c1d565b919091019291505056fea164736f6c634300080f000a60e06040523480156200001157600080fd5b50604051620022d2380380620022d2833981016040819052620000349162000859565b6001608052600360a052600060c052620000548787878787878762000061565b5050505050505062000a59565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000adf1760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006bb565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022b283398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006e8565b565b620002f16200074f565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007ab565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6001816040015160ff1611620004665760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000112565b606854608082015182516001600160401b0390921691620004889190620009a8565b63ffffffff161115620004de5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff16116200054f5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000571908290620009d3565b6200057d919062000a05565b63ffffffff1614620005f85760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006e39063ffffffff6a010000000000000000000082048116911662000a34565b905090565b600054610100900460ff16620007445760405162461bcd60e51b815260206004820152602b6024820152600080516020620022b283398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007ab565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200081557600080fd5b919050565b805163ffffffff811681146200081557600080fd5b805160ff811681146200081557600080fd5b80516001600160801b03811681146200081557600080fd5b60008060008060008060008789036101808112156200087757600080fd5b6200088289620007fd565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008b757600080fd5b819550620008c860a08c01620007fd565b945060c060bf1984011215620008dd57600080fd5b604051925060c08301915082821081831117156200090b57634e487b7160e01b600052604160045260246000fd5b506040526200091d60c08a016200081a565b81526200092d60e08a016200082f565b6020820152620009416101008a016200082f565b6040820152620009556101208a016200081a565b6060820152620009696101408a016200081a565b60808201526200097d6101608a0162000841565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009ca57620009ca62000992565b01949350505050565b600063ffffffff80841680620009f957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a2b5762000a2b62000992565b02949350505050565b60006001600160401b03828116848216808303821115620009ca57620009ca62000992565b60805160a05160c05161182962000a89600039600061056e015260006105450152600061051c01526118296000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b7146103f7578063f975e9251461040b578063ffa1ad741461041e57600080fd5b8063f2fde38b146103db578063f45e65d8146103ee57600080fd5b8063c9b26f61116100b2578063c9b26f611461028b578063cc731b021461029e578063e81b2c6d146103d257600080fd5b8063b40a817c14610265578063c71973f61461027857600080fd5b80634f16540b11610124578063715018a611610109578063715018a61461022c5780638da5cb5b14610234578063935f029e1461025257600080fd5b80634f16540b146101f057806354fd4d501461021757600080fd5b80630c18c1621461015657806318d13918146101725780631fd19ee1146101875780634add321d146101cf575b600080fd5b61015f60655481565b6040519081526020015b60405180910390f35b610185610180366004611307565b610426565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610169565b6101d76104ea565b60405167ffffffffffffffff9091168152602001610169565b61015f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61021f610515565b60405161016991906113a3565b6101856105b8565b60335473ffffffffffffffffffffffffffffffffffffffff166101aa565b6101856102603660046113b6565b6105cc565b6101856102733660046113f0565b610665565b610185610286366004611548565b610750565b610185610299366004611564565b610764565b6103626040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101699190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61015f60675481565b6101856103e9366004611307565b610794565b61015f60665481565b6068546101d79067ffffffffffffffff1681565b61018561041936600461157d565b610848565b61015f600081565b61042e610afb565b610456817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516104de91906113a3565b60405180910390a35050565b6069546000906105109063ffffffff6a010000000000000000000082048116911661161f565b905090565b60606105407f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6105697f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6105927f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6040516020016105a49392919061164b565b604051602081830303815290604052905090565b6105c0610afb565b6105ca6000610cb9565b565b6105d4610afb565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161065891906113a3565b60405180910390a3505050565b61066d610afb565b6106756104ea565b67ffffffffffffffff168167ffffffffffffffff1610156106f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ad565b610758610afb565b61076181610d30565b50565b61076c610afb565b60678190556040805160208082018490528251808303909101815290820190915260006104ad565b61079c610afb565b73ffffffffffffffffffffffffffffffffffffffff811661083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106ee565b61076181610cb9565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ee565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561096c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109746111a4565b61097d88610794565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c088390556109ed82610d30565b6109f56104ea565b67ffffffffffffffff168467ffffffffffffffff161015610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016106ee565b8015610ad557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ee565b606081600003610bbf57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610be95780610bd3816116c1565b9150610be29050600a83611728565b9150610bc3565b60008167ffffffffffffffff811115610c0457610c0461140b565b6040519080825280601f01601f191660200182016040528015610c2e576020820181803683370190505b5090505b8415610cb157610c4360018361173c565b9150610c50600a86611753565b610c5b906030611767565b60f81b818381518110610c7057610c7061177f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610caa600a86611728565b9450610c32565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016106ee565b6001816040015160ff1611610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016106ee565b6068546080820151825167ffffffffffffffff90921691610e9891906117ae565b63ffffffff161115610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016106ee565b6000816020015160ff1611610f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016106ee565b8051602082015163ffffffff82169160ff90911690610fbd9082906117cd565b610fc791906117f0565b63ffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016106ee565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ee565b6105ca600054610100900460ff166112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ee565b6105ca33610cb9565b803573ffffffffffffffffffffffffffffffffffffffff8116811461130257600080fd5b919050565b60006020828403121561131957600080fd5b611322826112de565b9392505050565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b60008151808452611371816020860160208601611329565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113226020830184611359565b600080604083850312156113c957600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461130257600080fd5b60006020828403121561140257600080fd5b611322826113d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461130257600080fd5b803560ff8116811461130257600080fd5b80356fffffffffffffffffffffffffffffffff8116811461130257600080fd5b600060c0828403121561149157600080fd5b60405160c0810181811067ffffffffffffffff821117156114db577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806114ea8361143a565b81526114f86020840161144e565b60208201526115096040840161144e565b604082015261151a6060840161143a565b606082015261152b6080840161143a565b608082015261153c60a0840161145f565b60a08201525092915050565b600060c0828403121561155a57600080fd5b611322838361147f565b60006020828403121561157657600080fd5b5035919050565b6000806000806000806000610180888a03121561159957600080fd5b6115a2886112de565b96506020880135955060408801359450606088013593506115c5608089016113d8565b92506115d360a089016112de565b91506115e28960c08a0161147f565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611642576116426115f0565b01949350505050565b6000845161165d818460208901611329565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611699816001850160208a01611329565b600192019182015283516116b4816002840160208801611329565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116f2576116f26115f0565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611737576117376116f9565b500490565b60008282101561174e5761174e6115f0565b500390565b600082611762576117626116f9565b500690565b6000821982111561177a5761177a6115f0565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611642576116426115f0565b600063ffffffff808416806117e4576117e46116f9565b92169190910492915050565b600063ffffffff80831681851681830481118215151615611813576118136115f0565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696101606040523480156200001257600080fd5b506040516200608c3803806200608c83398101604081905262000035916200029e565b6001608052600660a052600060c0526001600160a01b0380861660e052848116610120528281166101005281166101405262000071836200007c565b505050505062000322565b600054610100900460ff16158080156200009d5750600054600160ff909116105b80620000cd5750620000ba30620001d360201b62001ddc1760201c565b158015620000cd575060005460ff166001145b620001365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200015a576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000188620001e2565b8015620001cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff166200024f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200012d565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200029b57600080fd5b50565b600080600080600060a08688031215620002b757600080fd5b8551620002c48162000285565b6020870151909550620002d78162000285565b60408701519094508015158114620002ee57600080fd5b6060870151909350620003018162000285565b6080870151909250620003148162000285565b809150509295509295909350565b60805160a05160c05160e051610100516101205161014051615cc2620003ca600039600081816103790152818161072e015261100d015260008181610287015281816111cb015261146801526000818161051a01526126d101526000818161018801528181610a3001528181610ca2015281816113c4015281816118d401528181611ab5015261220c0152600061132f01526000611306015260006112dd0152615cc26000f3fe6080604052600436106101475760003560e01c80638b4c40b0116100c0578063cff0ab9611610074578063d69b2b1b11610059578063d69b2b1b1461045c578063e965084c1461047c578063f04987501461050857600080fd5b8063cff0ab961461039b578063d53a822f1461043c57600080fd5b8063a14238e7116100a5578063a14238e7146102fe578063a35d99df1461032e578063ac6986c51461036757600080fd5b80638b4c40b01461016f5780639bf62d82146102d157600080fd5b80635c975abb11610117578063724c184c116100fc578063724c184c146102755780638456cb59146102a957806385945feb146102be57600080fd5b80635c975abb1461022b5780636dbffb781461025557600080fd5b80621c2ff6146101765780632e71d4a4146101d45780633f4ba83a146101f457806354fd4d501461020957600080fd5b366101715761016f6000336000620186a060006040518060200160405280600081525061053c565b005b600080fd5b34801561018257600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101e057600080fd5b5061016f6101ef366004615224565b610822565b34801561020057600080fd5b5061016f6111b3565b34801561021557600080fd5b5061021e6112d6565b6040516101cb91906152cf565b34801561023757600080fd5b506035546102459060ff1681565b60405190151581526020016101cb565b34801561026157600080fd5b506102456102703660046152e2565b611379565b34801561028157600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b557600080fd5b5061016f611450565b61016f6102cc366004615324565b61053c565b3480156102dd57600080fd5b506032546101aa9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561030a57600080fd5b506102456103193660046152e2565b60336020526000908152604090205460ff1681565b34801561033a57600080fd5b5061034e6103493660046153a7565b611570565b60405167ffffffffffffffff90911681526020016101cb565b34801561037357600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b50600154610403906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101cb565b34801561044857600080fd5b5061016f6104573660046153c2565b611589565b34801561046857600080fd5b5061016f6104773660046153df565b611776565b34801561048857600080fd5b506104da6104973660046152e2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101cb565b34801561051457600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f35773ffffffffffffffffffffffffffffffffffffffff8716156105f357604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6105fd8351611570565b67ffffffffffffffff168567ffffffffffffffff1610156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016105ea565b6201d4c08351111561070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016105ea565b87156107565761075673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308b611df8565b33328114610777575033731111000000000000000000000000000000001111015b6000898834898989604051602001610794969594939291906154bb565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161080491906152cf565b60405180910390a450506108188282611e93565b5050505050505050565b60355460ff161561088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105ea565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105ea565b6000610943826121b6565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003610a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016105ea565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abd9190615527565b81602001516fffffffffffffffffffffffffffffffff161015610b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105ea565b610ba781602001516fffffffffffffffffffffffffffffffff16612208565b610c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105ea565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190615560565b8251815191925014610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105ea565b610dfb81602001516fffffffffffffffffffffffffffffffff16612208565b610ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105ea565b60008381526033602052604090205460ff1615610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105ea565b6000838152603360209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905590860151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905586820151606088015192517fa9059cbb000000000000000000000000000000000000000000000000000000008152908216600482015260248101929092527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a91906155c5565b9050600061109a86604001518760a0015188608001518960c001516122ab565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050847fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b8280156110f45750835b604051901515815260200160405180910390a2808015611112575081155b801561111e5750326001145b156111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105ea565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e7061757365000000000000000000000000000000000000000000000060648201526084016105ea565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60606113017f0000000000000000000000000000000000000000000000000000000000000000612309565b61132a7f0000000000000000000000000000000000000000000000000000000000000000612309565b6113537f0000000000000000000000000000000000000000000000000000000000000000612309565b604051602001611365939291906155e2565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061144a9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f9190615560565b602001516fffffffffffffffffffffffffffffffff16612208565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e2070617573650000000000000000000000000000000000000000000000000060648201526084016105ea565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016112cc565b600061157d826010615687565b61144a906152086156b7565b600054610100900460ff16158080156115a95750600054600160ff909116105b806115c35750303b1580156115c3575060005460ff166001145b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105ea565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156116ad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905561170f612446565b801561177257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60355460ff16156117e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105ea565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105ea565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119549190615560565b51905061196e611969368690038601866156e3565b612529565b81146119fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105ea565b6000611a07876121b6565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580611b395750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b359190615560565b5114155b611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105ea565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c8e9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290611c84888a615749565b8a60400135612568565b611d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105ea565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611e8d90859061258c565b50505050565b600154600090611ec9907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436157cd565b90506000611ed561269d565b90506000816020015160ff16826000015163ffffffff16611ef69190615813565b9050821561202d57600154600090611f2d908390700100000000000000000000000000000000900467ffffffffffffffff1661587b565b90506000836040015160ff1683611f4491906158ef565b600154611f649084906fffffffffffffffffffffffffffffffff166158ef565b611f6e9190615813565b600154909150600090611fbf90611f989084906fffffffffffffffffffffffffffffffff166159ab565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612763565b90506001861115611fee57611feb611f9882876040015160ff1660018a611fe691906157cd565b612782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612060908490700100000000000000000000000000000000900467ffffffffffffffff166156b7565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105ea565b60015460009061216f906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615a1f565b9050600061218148633b9aca006127d7565b61218b9083615a5c565b905060005a61219a90886157cd565b905080821115610818576108186121b182846157cd565b6127ee565b80516020808301516040808501516060860151608087015160a088015160c089015194516000986121eb989097969101615a70565b604051602081830303815290604052805190602001209050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122999190615527565b6122a39083615ace565b421192915050565b60008060006122bb866000612817565b9050806122f1576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60608160000361234c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612376578061236081615ae6565b915061236f9050600a83615a5c565b9150612350565b60008167ffffffffffffffff81111561239157612391615034565b6040519080825280601f01601f1916602001820160405280156123bb576020820181803683370190505b5090505b841561243e576123d06001836157cd565b91506123dd600a86615b1e565b6123e8906030615ace565b60f81b8183815181106123fd576123fd615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612437600a86615a5c565b94506123bf565b949350505050565b600054610100900460ff166124dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105ea565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600081600001518260200151836040015184606001516040516020016121eb949392919093845260208401929092526040830152606082015260800190565b60008061257486612835565b905061258281868686612867565b9695505050505050565b60006125ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128979092919063ffffffff16565b805190915015612698578080602001905181019061260c91906155c5565b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105ea565b505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa15801561273a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275e9190615b86565b905090565b600061277861277285856128a6565b836128b6565b90505b9392505050565b6000670de0b6b3a76400006127c361279a8583615813565b6127ac90670de0b6b3a764000061587b565b6127be85670de0b6b3a76400006158ef565b6128c5565b6127cd90866158ef565b6127789190615813565b6000818310156127e7578161277b565b5090919050565b6000805a90505b825a61280190836157cd565b10156126985761281082615ae6565b91506127f5565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161285191815260200190565b6040516020818303038152906040529050919050565b600061288e846128788786866128f6565b8051602091820120825192909101919091201490565b95945050505050565b6060612778848460008561337e565b6000818312156127e7578161277b565b60008183126127e7578161277b565b600061277b670de0b6b3a7640000836128dd86613514565b6128e791906158ef565b6128f19190615813565b613758565b60606000845111612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016105ea565b600061296e84613997565b9050600061297b86613a86565b905060008460405160200161299291815260200190565b60405160208183030381529060405290506000805b84518110156132f55760008582815181106129c4576129c4615b32565b602002602001015190508451831115612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105ea565b82600003612b185780518051602091820120604051612aad92612a8792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105ea565b612c6f565b805151602011612bce5780518051602091820120604051612b4292612a8792910190815260200190565b612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105ea565b805184516020808701919091208251919092012014612c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105ea565b612c7b60106001615ace565b81602001515103612e5c5784518303612df4576000612cb78260200151601081518110612caa57612caa615b32565b6020026020010151613c21565b90506000815111612d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105ea565b60018751612d5891906157cd565b8314612de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105ea565b965061277b95505050505050565b6000858481518110612e0857612e08615b32565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612e3357612e33615b32565b60200260200101519050612e4681613d81565b9550612e53600186615ace565b945050506132e2565b60028160200151510361325a576000612e7482613da6565b9050600081600081518110612e8b57612e8b615b32565b016020015160f81c90506000612ea2600283615c25565b612ead906002615c47565b90506000612ebe848360ff16613dca565b90506000612ecc8a89613dca565b90506000612eda8383613e00565b905080835114612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105ea565b60ff851660021480612f81575060ff85166003145b156131755780825114613016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105ea565b60006130328860200151600181518110612caa57612caa615b32565b905060008151116130c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105ea565b60018d516130d391906157cd565b8914613161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105ea565b9c5061277b9b505050505050505050505050565b60ff85161580613188575060ff85166001145b156131c7576131b487602001516001815181106131a7576131a7615b32565b6020026020010151613d81565b99506131c0818a615ace565b985061324f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105ea565b5050505050506132e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105ea565b50806132ed81615ae6565b9150506129a7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105ea565b606082471015613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105ea565b73ffffffffffffffffffffffffffffffffffffffff85163b61348e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ea565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516134b79190615c6a565b60006040518083038185875af1925050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b5091509150613509828286613eaf565b979650505050505050565b600080821361357f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105ea565b6000606061358c84613f02565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361378957506000919050565b680755bf798b4a1bf1e582126137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105ea565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff8111156139b7576139b7615034565b6040519080825280602002602001820160405280156139fc57816020015b60408051808201909152606080825260208201528152602001906001900390816139d55790505b50905060005b82811015613a7e576040518060400160405280868381518110613a2757613a27615b32565b60200260200101518152602001613a56878481518110613a4957613a49615b32565b6020026020010151613fd8565b815250828281518110613a6b57613a6b615b32565b6020908102919091010152600101613a02565b509392505050565b80516060906000613a98826002615a1f565b67ffffffffffffffff811115613ab057613ab0615034565b6040519080825280601f01601f191660200182016040528015613ada576020820181803683370190505b5090506000805b83811015613c1757858181518110613afb57613afb615b32565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683613b57836002615a1f565b81518110613b6757613b67615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683613bc5836002615a1f565b613bd0906001615ace565b81518110613be057613be0615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613ae1565b5090949350505050565b60606000806000613c3185613feb565b919450925090506000816001811115613c4c57613c4c615c86565b14613cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105ea565b613ce38284615ace565b855114613d72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105ea565b61288e85602001518484614a58565b60606020826000015110613d9d57613d9882613c21565b61144a565b61144a82614af9565b606061144a613dc58360200151600081518110612caa57612caa615b32565b613a86565b606082518210613de9575060408051602081019091526000815261144a565b61277b8383848651613dfb91906157cd565b614b0f565b60008060008351855110613e15578351613e18565b84515b90505b8082108015613e9f5750838281518110613e3757613e37615b32565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916858381518110613e7657613e76615b32565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613a7e57816001019150613e1b565b60608315613ebe57508161277b565b825115613ece5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea91906152cf565b6000808211613f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105ea565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061144a613fe683614ce7565b614dd0565b6000806000808460000151116140a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105ea565b6020840151805160001a607f81116140ce576000600160009450945094505050614a51565b60b781116142dc5760006140e36080836157cd565b90508087600001511161419e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105ea565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061421757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6142c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105ea565b5060019550935060009250614a51915050565b60bf811161462a5760006142f160b7836157cd565b9050808760000151116143ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105ea565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361448a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105ea565b600184015160088302610100031c6037811161454e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105ea565b6145588184615ace565b89511161460d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105ea565b614618836001615ace565b9750955060009450614a519350505050565b60f7811161470b57600061463f60c0836157cd565b9050808760000151116146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105ea565b600195509350849250614a51915050565b600061471860f7836157cd565b9050808760000151116147d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105ea565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036148b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105ea565b600184015160088302610100031c60378111614975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105ea565b61497f8184615ace565b895111614a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105ea565b614a3f836001615ace565b9750955060019450614a519350505050565b9193909250565b606060008267ffffffffffffffff811115614a7557614a75615034565b6040519080825280601f01601f191660200182016040528015614a9f576020820181803683370190505b50905082600003614ab157905061277b565b6000614abd8587615ace565b90506020820160005b85811015614ade578281015182820152602001614ac6565b85811115614aed576000868301525b50919695505050505050565b606061144a826020015160008460000151614a58565b60608182601f011015614b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105ea565b828284011015614bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105ea565b81830184511015614c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105ea565b606082158015614c765760405191506000825260208201604052614cde565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614caf578051835260209283019201614c97565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105ea565b50604080518082019091528151815260209182019181019190915290565b60606000806000614de085613feb565b919450925090506001816001811115614dfb57614dfb615c86565b14614e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105ea565b8451614e948385615ace565b14614f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105ea565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081614f3a5790505090506000845b875181101561502857600080614fad6040518060400160405280858d60000151614f9191906157cd565b8152602001858d60200151614fa69190615ace565b9052613feb565b509150915060405180604001604052808383614fc99190615ace565b8152602001848c60200151614fde9190615ace565b815250858581518110614ff357614ff3615b32565b6020908102919091010152615009600185615ace565b93506150158183615ace565b61501f9084615ace565b92505050614f67565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561508657615086615034565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150d3576150d3615034565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146150ff57600080fd5b919050565b600082601f83011261511557600080fd5b813567ffffffffffffffff81111561512f5761512f615034565b61516060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161508c565b81815284602083860101111561517557600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082840312156151a457600080fd5b6151ac615063565b9050813581526151be602083016150db565b60208201526151cf604083016150db565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013567ffffffffffffffff81111561520c57600080fd5b61521884828501615104565b60c08301525092915050565b60006020828403121561523657600080fd5b813567ffffffffffffffff81111561524d57600080fd5b61243e84828501615192565b60005b8381101561527457818101518382015260200161525c565b83811115611e8d5750506000910152565b6000815180845261529d816020860160208601615259565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061277b6020830184615285565b6000602082840312156152f457600080fd5b5035919050565b803567ffffffffffffffff811681146150ff57600080fd5b801515811461532157600080fd5b50565b60008060008060008060c0878903121561533d57600080fd5b8635955061534d602088016150db565b945060408701359350615362606088016152fb565b9250608087013561537281615313565b915060a087013567ffffffffffffffff81111561538e57600080fd5b61539a89828a01615104565b9150509295509295509295565b6000602082840312156153b957600080fd5b61277b826152fb565b6000602082840312156153d457600080fd5b813561277b81615313565b600080600080600085870360e08112156153f857600080fd5b863567ffffffffffffffff8082111561541057600080fd5b61541c8a838b01615192565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561545557600080fd5b60408901955060c089013592508083111561546f57600080fd5b828901925089601f84011261548357600080fd5b823591508082111561549457600080fd5b508860208260051b84010111156154aa57600080fd5b959894975092955050506020019190565b8681528560208201528460408201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16606082015282151560f81b606882015260008251615515816069850160208701615259565b91909101606901979650505050505050565b60006020828403121561553957600080fd5b5051919050565b80516fffffffffffffffffffffffffffffffff811681146150ff57600080fd5b60006060828403121561557257600080fd5b6040516060810181811067ffffffffffffffff8211171561559557615595615034565b604052825181526155a860208401615540565b60208201526155b960408401615540565b60408201529392505050565b6000602082840312156155d757600080fd5b815161277b81615313565b600084516155f4818460208901615259565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615630816001850160208a01615259565b6001920191820152835161564b816002840160208801615259565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156156ae576156ae615658565b02949350505050565b600067ffffffffffffffff8083168185168083038211156156da576156da615658565b01949350505050565b6000608082840312156156f557600080fd5b6040516080810181811067ffffffffffffffff8211171561571857615718615034565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561576457615764615034565b8360051b602061577581830161508c565b86815291850191818101903684111561578d57600080fd5b865b848110156157c1578035868111156157a75760008081fd5b6157b336828b01615104565b84525091830191830161578f565b50979650505050505050565b6000828210156157df576157df615658565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615822576158226157e4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561587657615876615658565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156158b5576158b5615658565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156158e9576158e9615658565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561593057615930615658565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561596b5761596b615658565b6000871292508782058712848416161561598757615987615658565b8785058712818416161561599d5761599d615658565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156159e5576159e5615658565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615a1957615a19615658565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a5757615a57615658565b500290565b600082615a6b57615a6b6157e4565b500490565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615ac160e0830184615285565b9998505050505050505050565b60008219821115615ae157615ae1615658565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b1757615b17615658565b5060010190565b600082615b2d57615b2d6157e4565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff811681146150ff57600080fd5b805160ff811681146150ff57600080fd5b600060c08284031215615b9857600080fd5b60405160c0810181811067ffffffffffffffff82111715615bbb57615bbb615034565b604052615bc783615b61565b8152615bd560208401615b75565b6020820152615be660408401615b75565b6040820152615bf760608401615b61565b6060820152615c0860808401615b61565b6080820152615c1960a08401615540565b60a08201529392505050565b600060ff831680615c3857615c386157e4565b8060ff84160691505092915050565b600060ff821660ff841680821015615c6157615c61615658565b90039392505050565b60008251615c7c818460208701615259565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036101206040523480156200001257600080fd5b5073420000000000000000000000000000000000001060006040518060400160405280600581526020016422ba3432b960d91b815250604051806040016040528060048152602001630ae8aa8960e31b8152506001600080848481600390816200007d91906200015b565b5060046200008c82826200015b565b50505060809290925260a05260c05250506001600160a01b0390811660e052166101005262000227565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000e157607f821691505b6020821081036200010257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015657600081815260208120601f850160051c81016020861015620001315750805b601f850160051c820191505b8181101562000152578281556001016200013d565b5050505b505050565b81516001600160401b03811115620001775762000177620000b6565b6200018f81620001888454620000cc565b8462000108565b602080601f831160018114620001c75760008415620001ae5750858301515b600019600386901b1c1916600185901b17855562000152565b600085815260208120601f198616915b82811015620001f857888601518255948401946001909101908401620001d7565b5085821015620002175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161156c6200027a600039600081816102f5015261038a0152600081816101a9015261031b0152600061070f015260006106e6015260006106bd015261156c6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e1461033f578063e78cea92146102f3578063ee9a31a21461038557600080fd5b8063ae1f6aaf146102f3578063c01e1bd614610319578063d6c0b2c41461031957600080fd5b80639dc29fac116100bd5780639dc29fac146102ba578063a457c2d7146102cd578063a9059cbb146102e057600080fd5b806370a082311461027c57806395d89b41146102b257600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a3660046111a8565b6103ac565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861049d565b60405161019b919061121d565b61018f610213366004611297565b61052f565b6002545b60405190815260200161019b565b61018f6102383660046112c1565b610547565b6040516012815260200161019b565b61018f61025a366004611297565b61056b565b61027261026d366004611297565b6105b7565b005b6101f86106b6565b61021c61028a3660046112fd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610759565b6102726102c8366004611297565b610768565b61018f6102db366004611297565b610869565b61018f6102ee366004611297565b61093a565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61034d366004611318565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061046557507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061049457507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ac9061134b565b80601f01602080910402602001604051908101604052809291908181526020018280546104d89061134b565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b60003361053d818585610948565b5060019392505050565b600033610555858285610afc565b610560858585610bd3565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061053d90829086906105b29087906113cd565b610948565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152609560248201527f42564d5f4554483a206d696e742069732064697361626c6564206279206e6f7260448201527f6d616c20636f6e74726163742063616c6c696e672e2042564d5f455448206d6960648201527f6e742063616e206f6e6c792062652074726967676572656420696e206465706f60848201527f736974207472616e73616374696f6e20657865637574696f6e2c2073696d696c60a48201527f617220746f204d4e54206d696e74206f6e204c322e000000000000000000000060c482015260e4015b60405180910390fd5b60606106e17f0000000000000000000000000000000000000000000000000000000000000000610e86565b61070a7f0000000000000000000000000000000000000000000000000000000000000000610e86565b6107337f0000000000000000000000000000000000000000000000000000000000000000610e86565b604051602001610745939291906113e5565b604051602081830303815290604052905090565b6060600480546104ac9061134b565b337342000000000000000000000000000000000000161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79204c324d6560448201527f73736167655061737365722063616e206275726e00000000000000000000000060648201526084016106ad565b6108158282610fc3565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161085d91815260200190565b60405180910390a25050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ad565b6105608286868403610948565b60003361053d818585610bd3565b73ffffffffffffffffffffffffffffffffffffffff83166109ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff8216610a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bcd5781811015610bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ad565b610bcd8484848403610948565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff8216610d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e139084906113cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e7991815260200190565b60405180910390a3610bcd565b606081600003610ec957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610ef35780610edd8161145b565b9150610eec9050600a836114c2565b9150610ecd565b60008167ffffffffffffffff811115610f0e57610f0e6114d6565b6040519080825280601f01601f191660200182016040528015610f38576020820181803683370190505b5090505b8415610fbb57610f4d600183611505565b9150610f5a600a8661151c565b610f659060306113cd565b60f81b818381518110610f7a57610f7a611530565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610fb4600a866114c2565b9450610f3c565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611158908490611505565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aef565b6000602082840312156111ba57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111ea57600080fd5b9392505050565b60005b8381101561120c5781810151838201526020016111f4565b83811115610bcd5750506000910152565b602081526000825180602084015261123c8160408501602087016111f1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461129257600080fd5b919050565b600080604083850312156112aa57600080fd5b6112b38361126e565b946020939093013593505050565b6000806000606084860312156112d657600080fd5b6112df8461126e565b92506112ed6020850161126e565b9150604084013590509250925092565b60006020828403121561130f57600080fd5b6111ea8261126e565b6000806040838503121561132b57600080fd5b6113348361126e565b91506113426020840161126e565b90509250929050565b600181811c9082168061135f57607f821691505b602082108103611398577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113e0576113e061139e565b500190565b600084516113f78184602089016111f1565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611433816001850160208a016111f1565b6001920191820152835161144e8160028401602088016111f1565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361148c5761148c61139e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826114d1576114d1611493565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156115175761151761139e565b500390565b60008261152b5761152b611493565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a60a060405260c86080523480156200001657600080fd5b50620000216200004e565b6200004833620000346012600a62000824565b620000429061271062000832565b62000111565b6200089f565b600054610100900460ff1615620000bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084015b60405180910390fd5b60005460ff90811610156200010f576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6200012882826200012c60201b620013841760201c565b5050565b620001438282620001e060201b620014511760201c565b6001600160e01b0362000157620002cf8216565b1115620001c05760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401620000b3565b620001da61013262001579620002d560201b1783620002ec565b50505050565b6001600160a01b038216620002385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000b3565b80603560008282546200024c919062000854565b90915550506001600160a01b038216600090815260336020526040812080548392906200027b90849062000854565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36200012860008383620004a3565b60355490565b6000620002e3828462000854565b90505b92915050565b8254600090819080156200033e5785620003086001836200086f565b815481106200031b576200031b62000889565b60009182526020909120015464010000000090046001600160e01b031662000341565b60005b6001600160e01b031692506200035883858760201c565b91506000811180156200039c57504386620003756001846200086f565b8154811062000388576200038862000889565b60009182526020909120015463ffffffff16145b156200041057620003b882620004bb60201b620015851760201c565b86620003c66001846200086f565b81548110620003d957620003d962000889565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b0316021790555062000495565b85604051806040016040528062000432436200052a60201b620016371760201c565b63ffffffff1681526020016200045385620004bb60201b620015851760201c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b505050565b6200049e8383836200059160201b620016cd1760201c565b60006001600160e01b03821115620005265760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401620000b3565b5090565b600063ffffffff821115620005265760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401620000b3565b620005a98383836200049e60201b620009451760201c565b6001600160a01b03838116600090815261013060205260408082205485841683529120546200049e92918216911683818314801590620005e95750600081115b156200049e576001600160a01b0383161562000677576001600160a01b0383166000908152610131602090815260408220829162000634919062000703901b6200170d1785620002ec565b91509150846001600160a01b031660008051602062003c8d83398151915283836040516200066c929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200049e576001600160a01b03821660009081526101316020908152604082208291620006bc9190620002d5901b620015791785620002ec565b91509150836001600160a01b031660008051602062003c8d8339815191528383604051620006f4929190918252602082015260400190565b60405180910390a25050505050565b6000620002e382846200086f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007685781600019048211156200074c576200074c62000711565b808516156200075a57918102915b93841c93908002906200072c565b509250929050565b6000826200078157506001620002e6565b816200079057506000620002e6565b8160018114620007a95760028114620007b457620007d4565b6001915050620002e6565b60ff841115620007c857620007c862000711565b50506001821b620002e6565b5060208310610133831016604e8410600b8410161715620007f9575081810a620002e6565b62000805838362000727565b80600019048211156200081c576200081c62000711565b029392505050565b6000620002e3838362000770565b60008160001904831182151516156200084f576200084f62000711565b500290565b600082198211156200086a576200086a62000711565b500190565b60008282101562000884576200088462000711565b500390565b634e487b7160e01b600052603260045260246000fd5b6080516133c4620008c9600039600081816105400152818161067b01526106d001526133c46000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806379cc679011610145578063a9f8ad04116100bd578063da35a26f1161008c578063e40172b311610071578063e40172b31461053b578063f1127ed814610562578063f2fde38b146105b457600080fd5b8063da35a26f146104e2578063dd62ed3e146104f557600080fd5b8063a9f8ad04146104a7578063c3cda520146104b2578063cf665443146104c5578063d505accf146104cf57600080fd5b80638e539e8c116101145780639ab24eb0116100f95780639ab24eb01461046e578063a457c2d714610481578063a9059cbb1461049457600080fd5b80638e539e8c1461045357806395d89b411461046657600080fd5b806379cc6790146104065780637ecebe001461041957806389110e5d1461042c5780638da5cb5b1461043557600080fd5b80633a46b1a8116101d85780635c19a95c116101a75780636fcfff451161018c5780636fcfff45146103a057806370a08231146103c8578063715018a6146103fe57600080fd5b80635c19a95c146103835780636561e2111461039657600080fd5b80633a46b1a8146102eb57806340c10f19146102fe57806342966c6814610311578063587cde1e1461032457600080fd5b806323b872dd1161021457806323b872dd146102ae578063313ce567146102c15780633644e515146102d057806339509351146102d857600080fd5b806306fdde0314610246578063095ea7b31461026457806318160ddd146102875780631ae7f5f314610299575b600080fd5b61024e6105c7565b60405161025b9190612e00565b60405180910390f35b610277610272366004612e9c565b610659565b604051901515815260200161025b565b6035545b60405190815260200161025b565b6102ac6102a7366004612ec6565b610671565b005b6102776102bc366004612edf565b610749565b6040516012815260200161025b565b61028b61076d565b6102776102e6366004612e9c565b61077c565b61028b6102f9366004612e9c565b6107c8565b6102ac61030c366004612e9c565b61086a565b6102ac61031f366004612ec6565b61094a565b61035e610332366004612f1b565b73ffffffffffffffffffffffffffffffffffffffff908116600090815261013060205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b6102ac610391366004612f1b565b610957565b61028b6101625481565b6103b36103ae366004612f1b565b610961565b60405163ffffffff909116815260200161025b565b61028b6103d6366004612f1b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b6102ac610997565b6102ac610414366004612e9c565b6109ab565b61028b610427366004612f1b565b6109c4565b61028b61271081565b60975473ffffffffffffffffffffffffffffffffffffffff1661035e565b61028b610461366004612ec6565b6109ef565b61024e610a66565b61028b61047c366004612f1b565b610a75565b61027761048f366004612e9c565b610b42565b6102776104a2366004612e9c565b610c13565b61028b6301e1338081565b6102ac6104c0366004612f47565b610c21565b61028b6101635481565b6102ac6104dd366004612f9f565b610d98565b6102ac6104f0366004613009565b610f57565b61028b610503366004613035565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b61057561057036600461305f565b611229565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16928101929092520161025b565b6102ac6105c2366004612f1b565b6112d0565b6060603680546105d69061309f565b80601f01602080910402602001604051908101604052809291908181526020018280546106029061309f565b801561064f5780601f106106245761010080835404028352916020019161064f565b820191906000526020600020905b81548152906001019060200180831161063257829003601f168201915b5050505050905090565b600033610667818585611719565b5060019392505050565b6106796118cc565b7f0000000000000000000000000000000000000000000000000000000000000000811115610701576040517fba96c68c000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b610162805490829055604080518281526020810184905233917fe2ee754bdb1a4ec4a5ecd3f810e4e7ca817cbbc379c89ff4e7a8b4dc6841a766910160405180910390a25050565b60003361075785828561194d565b610762858585611a1e565b506001949350505050565b6000610777611cd7565b905090565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061066790829086906107c390879061311b565b611719565b6000438210610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106f8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152610131602052604090206108639083611d52565b9392505050565b6108726118cc565b60006127106101625461088460355490565b61088e9190613133565b6108989190613170565b9050808211156108de576040517f5d84733f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016106f8565b6101635442101561092957610163546040517fea14abd200000000000000000000000000000000000000000000000000000000815242600482015260248101919091526044016106f8565b6109376301e133804261311b565b610163556109458383611e39565b505050565b6109543382611e43565b50565b6109543382611e4d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152610131602052604081205461099190611637565b92915050565b61099f6118cc565b6109a96000611eed565b565b6109b682338361194d565b6109c08282611e43565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260fd6020526040812054610991565b6000438210610a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106f8565b61099161013283611d52565b6060603780546105d69061309f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261013160205260408120548015610b1a5773ffffffffffffffffffffffffffffffffffffffff8316600090815261013160205260409020610ad36001836131ab565b81548110610ae357610ae36131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b1d565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106f8565b6107628286868403611719565b600033610667818585611a1e565b83421115610c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106f8565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610d1290610d0a9060a00160405160208183030381529060405280519060200120611f64565b858585611fcd565b9050610d1d81611ff5565b8614610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106f8565b610d8f8188611e4d565b50505050505050565b83421115610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106f8565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e318c611ff5565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e9982611f64565b90506000610ea982878787611fcd565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106f8565b610f4b8a8a8a611719565b50505050505050505050565b600054610100900460ff1615808015610f775750600054600160ff909116105b80610f915750303b158015610f91575060005460ff166001145b61101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106f8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b82158061109c575073ffffffffffffffffffffffffffffffffffffffff8216155b156110d3576040517ff57dc27600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111476040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4e54000000000000000000000000000000000000000000000000000000000081525061202a565b61114f6120cb565b611157612162565b6111956040518060400160405280600681526020017f4d616e746c650000000000000000000000000000000000000000000000000000815250612201565b61119d6120cb565b6111a78284611e39565b6111b56301e133804261311b565b610163556111c282611eed565b801561094557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff8316600090815261013160205260409020805463ffffffff841690811061127b5761127b6131c2565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b6112d86118cc565b73ffffffffffffffffffffffffffffffffffffffff811661137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f8565b61095481611eed565b61138e8282611451565b6035547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff101561143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f7465730000000000000000000000000000000060648201526084016106f8565b61144b610132611579836122d7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106f8565b80603560008282546114e0919061311b565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260408120805483929061151a90849061311b565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36109c0600083836124b9565b6000610863828461311b565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f323420626974730000000000000000000000000000000000000000000000000060648201526084016106f8565b5090565b600063ffffffff821115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f322062697473000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526101306020526040808220548584168352912054610945929182169116836124c4565b600061086382846131ab565b73ffffffffffffffffffffffffffffffffffffffff83166117bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff821661185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461144b5781811015611a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106f8565b61144b8484848403611719565b73ffffffffffffffffffffffffffffffffffffffff8316611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff8216611b64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015611c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290611c5e90849061311b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc491815260200190565b60405180910390a361144b8484846124b9565b60006107777f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611d0660c95490565b60ca546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b81811015611db6576000611d6d828461266b565b905084868281548110611d8257611d826131c2565b60009182526020909120015463ffffffff161115611da257809250611db0565b611dad81600161311b565b91505b50611d59565b8115611e0f5784611dc86001846131ab565b81548110611dd857611dd86131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611e12565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b6109c08282611384565b6109c08282612686565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526101306020818152604080842080546033845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461144b8284836124c4565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610991611f71611cd7565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611fde8787878761269f565b91509150611feb816127b7565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260fd602052604090208054600181018255905b50919050565b600054610100900460ff166120c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109c08282612a0b565b600054610100900460ff166109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b600054610100900460ff166121f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109a9612abb565b600054610100900460ff16612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b610954816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612b5b565b82546000908190801561233757856122f06001836131ab565b81548110612300576123006131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661233a565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061236883858763ffffffff16565b91506000811180156123a6575043866123826001846131ab565b81548110612392576123926131c2565b60009182526020909120015463ffffffff16145b15612430576123b482611585565b866123c06001846131ab565b815481106123d0576123d06131c2565b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506124b0565b85604051806040016040528061244543611637565b63ffffffff16815260200161245985611585565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6109458383836116cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125005750600081115b156109455773ffffffffffffffffffffffffffffffffffffffff8316156125b65773ffffffffffffffffffffffffffffffffffffffff831660009081526101316020526040812081906125569061170d856122d7565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125ab929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff8216156109455773ffffffffffffffffffffffffffffffffffffffff8216600090815261013160205260408120819061260790611579856122d7565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161265c929190918252602082015260400190565b60405180910390a25050505050565b600061267a6002848418613170565b6108639084841661311b565b6126908282612c0c565b61144b61013261170d836122d7565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156126d657506000905060036127ae565b8460ff16601b141580156126ee57508460ff16601c14155b156126ff57506000905060046127ae565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612753573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166127a7576000600192509250506127ae565b9150600090505b94509492505050565b60008160048111156127cb576127cb6131f1565b036127d35750565b60018160048111156127e7576127e76131f1565b0361284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106f8565b6002816004811115612862576128626131f1565b036128c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106f8565b60038160048111156128dd576128dd6131f1565b0361296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b600481600481111561297e5761297e6131f1565b03610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b600054610100900460ff16612aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6036612aae838261329d565b506037610945828261329d565b600054610100900460ff16612b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109a933611eed565b600054610100900460ff16612bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b81516020928301208151919092012060c99190915560ca55565b73ffffffffffffffffffffffffffffffffffffffff8216612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604090205481811015612d65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603360205260408120838303905560358054849290612da19084906131ab565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610945836000846124b9565b600060208083528351808285015260005b81811015612e2d57858101830151858201604001528201612e11565b81811115612e3f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612e9757600080fd5b919050565b60008060408385031215612eaf57600080fd5b612eb883612e73565b946020939093013593505050565b600060208284031215612ed857600080fd5b5035919050565b600080600060608486031215612ef457600080fd5b612efd84612e73565b9250612f0b60208501612e73565b9150604084013590509250925092565b600060208284031215612f2d57600080fd5b61086382612e73565b803560ff81168114612e9757600080fd5b60008060008060008060c08789031215612f6057600080fd5b612f6987612e73565b95506020870135945060408701359350612f8560608801612f36565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612fba57600080fd5b612fc388612e73565b9650612fd160208901612e73565b95506040880135945060608801359350612fed60808901612f36565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561301c57600080fd5b8235915061302c60208401612e73565b90509250929050565b6000806040838503121561304857600080fd5b61305183612e73565b915061302c60208401612e73565b6000806040838503121561307257600080fd5b61307b83612e73565b9150602083013563ffffffff8116811461309457600080fd5b809150509250929050565b600181811c908216806130b357607f821691505b602082108103612024577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561312e5761312e6130ec565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561316b5761316b6130ec565b500290565b6000826131a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156131bd576131bd6130ec565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561094557600081815260208120601f850160051c810160208610156132765750805b601f850160051c820191505b8181101561329557828155600101613282565b505050505050565b815167ffffffffffffffff8111156132b7576132b7613220565b6132cb816132c5845461309f565b8461324f565b602080601f83116001811461331e57600084156132e85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613295565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561336b5788860151825594840194600190910190840161334c565b50858210156133a757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c634300080f000adec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7246101806040523480156200001257600080fd5b5060405162001b0238038062001b02833981016040819052620000359162000356565b6001608052600360a052600060c05285620000bd5760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e203000000000000000000000000060648201526084015b60405180910390fd5b60008711620001355760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000b4565b60e08790526101008690526001600160a01b038084166101405282166101205261016081905262000167858562000174565b50505050505050620003be565b600054610100900460ff1615808015620001955750600054600160ff909116105b80620001c55750620001b2306200032a60201b620012691760201c565b158015620001c5575060005460ff166001145b6200022a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b4565b6000805460ff1916600117905580156200024e576000805461ff0019166101001790555b42821115620002d45760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000b4565b60028290556001839055801562000325576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146200035157600080fd5b919050565b600080600080600080600060e0888a0312156200037257600080fd5b87519650602088015195506040880151945060608801519350620003996080890162000339565b9250620003a960a0890162000339565b915060c0880151905092959891949750929550565b60805160a05160c05160e051610100516101205161014051610160516116bb620004476000396000818161041501526108f601526000818161036c0152610a66015260008181610236015261079001526000818161015a0152610f9d0152600081816101b60152610feb01526000610503015260006104da015260006104b101526116bb6000f3fe6080604052600436106101435760003560e01c806388786272116100c0578063cf8e5cf011610074578063dcec334811610059578063dcec3348146103ce578063e4a30116146103e3578063f4daa2911461040357600080fd5b8063cf8e5cf01461038e578063d1de856c146103ae57600080fd5b80639aaab648116100a55780639aaab648146102eb578063a25ae557146102fe578063bffa7f0f1461035a57600080fd5b806388786272146102b357806389c44cbb146102c957600080fd5b806369f16eec116101175780636b4d98dd116100fc5780636b4d98dd1461022457806370872aa51461027d5780637f0064201461029357600080fd5b806369f16eec146101fa5780636abcf5631461020f57600080fd5b80622134cc146101485780634599c7881461018f578063529933df146101a457806354fd4d50146101d8575b600080fd5b34801561015457600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561019b57600080fd5b5061017c610437565b3480156101b057600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101e457600080fd5b506101ed6104aa565b60405161018691906113f2565b34801561020657600080fd5b5061017c61054d565b34801561021b57600080fd5b5060035461017c565b34801561023057600080fd5b506102587f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610186565b34801561028957600080fd5b5061017c60015481565b34801561029f57600080fd5b5061017c6102ae366004611443565b61055f565b3480156102bf57600080fd5b5061017c60025481565b3480156102d557600080fd5b506102e96102e4366004611443565b610778565b005b6102e96102f936600461145c565b610a4e565b34801561030a57600080fd5b5061031e610319366004611443565b610ecd565b60408051825181526020808401516fffffffffffffffffffffffffffffffff908116918301919091529282015190921690820152606001610186565b34801561036657600080fd5b506102587f000000000000000000000000000000000000000000000000000000000000000081565b34801561039a57600080fd5b5061031e6103a9366004611443565b610f61565b3480156103ba57600080fd5b5061017c6103c9366004611443565b610f99565b3480156103da57600080fd5b5061017c610fe7565b3480156103ef57600080fd5b506102e96103fe36600461148e565b61101c565b34801561040f57600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b600354600090156104a15760038054610452906001906114df565b81548110610462576104626114f6565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606104d57f0000000000000000000000000000000000000000000000000000000000000000611285565b6104fe7f0000000000000000000000000000000000000000000000000000000000000000611285565b6105277f0000000000000000000000000000000000000000000000000000000000000000611285565b60405160200161053993929190611525565b604051602081830303815290604052905090565b6003546000906104a5906001906114df565b6000610569610437565b821115610623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6003546106d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161061a565b6003546000905b8082101561077157600060026106f5838561159b565b6106ff91906115e2565b90508460038281548110610715576107156114f6565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1610156107675761076081600161159b565b925061076b565b8091505b506106df565b5092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161061a565b60035481106108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161061a565b7f000000000000000000000000000000000000000000000000000000000000000060038281548110610928576109286114f6565b6000918252602090912060016002909202010154610958906fffffffffffffffffffffffffffffffff16426114df565b10610a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161061a565b6000610a1660035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161061a565b610b41610fe7565b8314610bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161061a565b42610bff84610f99565b10610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161061a565b83610d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161061a565b8115610dd55781814014610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161061a565b82610ddf60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e242604051610e1191815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b604080516060810182526000808252602082018190529181019190915260038281548110610efd57610efd6114f6565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b60408051606081018252600080825260208201819052918101919091526003610f898361055f565b81548110610efd57610efd6114f6565b60007f000000000000000000000000000000000000000000000000000000000000000060015483610fca91906114df565b610fd491906115f6565b600254610fe1919061159b565b92915050565b60007f0000000000000000000000000000000000000000000000000000000000000000611012610437565b6104a5919061159b565b600054610100900460ff161580801561103c5750600054600160ff909116105b806110565750303b158015611056575060005460ff166001145b6110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161061a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561114057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156111f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161061a565b60028290556001839055801561126457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036112c857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156112f257806112dc81611633565b91506112eb9050600a836115e2565b91506112cc565b60008167ffffffffffffffff81111561130d5761130d61166b565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b5090505b84156113ba5761134c6001836114df565b9150611359600a8661169a565b61136490603061159b565b60f81b818381518110611379576113796114f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113b3600a866115e2565b945061133b565b949350505050565b60005b838110156113dd5781810151838201526020016113c5565b838111156113ec576000848401525b50505050565b60208152600082518060208401526114118160408501602087016113c2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561145557600080fd5b5035919050565b6000806000806080858703121561147257600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156114a157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156114f1576114f16114b0565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600084516115378184602089016113c2565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611573816001850160208a016113c2565b6001920191820152835161158e8160028401602088016113c2565b0160020195945050505050565b600082198211156115ae576115ae6114b0565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826115f1576115f16115b3565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561162e5761162e6114b0565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611664576116646114b0565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826116a9576116a96115b3565b50069056fea164736f6c634300080f000a60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280610ad461004a8239600061049a01526000610471015260006104480152610ad46000f3fe6080604052600436106100695760003560e01c806354fd4d501161004357806354fd4d50146100e957806382e3702d1461010b578063ecc704281461014b57600080fd5b806339fd0090146100945780633f827a5a146100a757806344df8e70146100d457600080fd5b3661008f5761008d600033620186a0604051806020016040528060008152506101b0565b005b600080fd5b61008d6100a23660046106dd565b6101b0565b3480156100b357600080fd5b506100bc600181565b60405161ffff90911681526020015b60405180910390f35b3480156100e057600080fd5b5061008d610409565b3480156100f557600080fd5b506100fe610441565b6040516100cb9190610865565b34801561011757600080fd5b5061013b61012636600461087f565b60006020819052908152604090205460ff1681565b60405190151581526020016100cb565b34801561015757600080fd5b506101a26001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100cb565b831561023b576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273deaddeaddeaddeaddeaddeaddeaddeaddead111190639dc29fac90604401600060405180830381600087803b15801561022257600080fd5b505af1158015610236573d6000803e3d6000fd5b505050505b60006102d86040518060e001604052806102956001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810188905260a0810186905260c0018490526104e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103736001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f5da382596b838a63b4248e533d8e399b3b0f13ba6c6679f670489d44716cb17334898888886040516103aa959493929190610898565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b4761041381610536565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061046c7f0000000000000000000000000000000000000000000000000000000000000000610565565b6104957f0000000000000000000000000000000000000000000000000000000000000000610565565b6104be7f0000000000000000000000000000000000000000000000000000000000000000610565565b6040516020016104d0939291906108cf565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610519989097969101610945565b604051602081830303815290604052805190602001209050919050565b80604051610543906106a2565b6040518091039082f0905080158015610560573d6000803e3d6000fd5b505050565b6060816000036105a857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156105d257806105bc816109d2565b91506105cb9050600a83610a39565b91506105ac565b60008167ffffffffffffffff8111156105ed576105ed6106ae565b6040519080825280601f01601f191660200182016040528015610617576020820181803683370190505b5090505b841561069a5761062c600183610a4d565b9150610639600a86610a64565b610644906030610a78565b60f81b81838151811061065957610659610a90565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610693600a86610a39565b945061061b565b949350505050565b600880610ac083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156106f357600080fd5b84359350602085013573ffffffffffffffffffffffffffffffffffffffff8116811461071e57600080fd5b925060408501359150606085013567ffffffffffffffff8082111561074257600080fd5b818701915087601f83011261075657600080fd5b813581811115610768576107686106ae565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107ae576107ae6106ae565b816040528281528a60208487010111156107c757600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60005b838110156108065781810151838201526020016107ee565b83811115610815576000848401525b50505050565b600081518084526108338160208601602086016107eb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610878602083018461081b565b9392505050565b60006020828403121561089157600080fd5b5035919050565b85815284602082015283604082015260a0606082015260006108bd60a083018561081b565b90508260808301529695505050505050565b600084516108e18184602089016107eb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161091d816001850160208a016107eb565b600192019182015283516109388160028401602088016107eb565b0160020195945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261099660e083018461081b565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a0357610a036109a3565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610a4857610a48610a0a565b500490565b600082821015610a5f57610a5f6109a3565b500390565b600082610a7357610a73610a0a565b500690565b60008219821115610a8b57610a8b6109a3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe608060405230fffea164736f6c634300080f000a608060405260008054600160ff19918216811790925560048054909116909117905534801561002d57600080fd5b50614ad08061003d6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063916a17c6116100cd578063ba414fa611610081578063e20a678911610066578063e20a6789146102bb578063e20c9f71146102ce578063fa7626d4146102d657600080fd5b8063ba414fa614610290578063dcf5edef146102a857600080fd5b8063af58c54c116100b2578063af58c54c14610262578063b5508aa914610275578063b69c56021461027d57600080fd5b8063916a17c61461023a578063ae04fe3e1461024257600080fd5b80633f7286f41161012457806366d9a9a01161010957806366d9a9a0146101ed5780637e577a1b1461020257806385226c811461022557600080fd5b80633f7286f4146101bd578063526dc955146101c557600080fd5b806313fa6ab8146101565780631ed7831c1461017c5780633e5e3c23146101915780633f47606914610199575b600080fd5b610169610164366004613e9f565b6102e3565b6040519081526020015b60405180910390f35b610184610a46565b6040516101739190613f24565b610184610ab5565b6101ac6101a7366004613f7e565b610b22565b604051610173959493929190614104565b6101846112b2565b6101d86101d336600461412f565b61131f565b60408051928352602083019190915201610173565b6101f5611583565b6040516101739190614148565b61021561021036600461423e565b611694565b6040516101739493929190614287565b61022d611913565b60405161017391906142c6565b6101f56119e3565b610255610250366004613e9f565b611aeb565b6040516101739190614346565b610169610270366004614371565b612241565b61022d612abb565b61016961028b366004613e9f565b612b8b565b610298612c3e565b6040519015158152602001610173565b6101696102b636600461440e565b612d9e565b6102556102c9366004614440565b612fd0565b610184613a0a565b6000546102989060ff1681565b6040805160098082526101408201909252600091829190816020015b60608152602001906001900390816102ff579050509050604051806060016040528060318152602001614a2e60319139816000815181106103425761034261447c565b60200260200101819052506040518060400160405280600e81526020017f686173685769746864726177616c000000000000000000000000000000000000815250816001815181106103965761039661447c565b60209081029190910101526040517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481018a9052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561040a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045091908101906144db565b816002815181106104635761046361447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa1580156104ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261053291908101906144db565b816003815181106105455761054561447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261061491908101906144db565b816004815181106106275761062761447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561069b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106e191908101906144db565b816005815181106106f4576106f461447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107ae91908101906144db565b816006815181106107c1576107c161447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610835573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261087b91908101906144db565b8160078151811061088e5761088e61447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906108e9908690600401614346565b600060405180830381865afa158015610906573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261094c91908101906144db565b8160088151811061095f5761095f61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906109bd9085906004016142c6565b6000604051808303816000875af11580156109dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a229190810190614544565b905080806020019051810190610a389190614579565b9a9950505050505050505050565b6060600d805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575b5050505050905090565b6060600f805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b60008080806060816009604051908082528060200260200182016040528015610b5f57816020015b6060815260200190600190039081610b4a5790505b509050604051806060016040528060318152602001614a2e6031913981600081518110610b8e57610b8e61447c565b6020026020010181905250604051806060016040528060238152602001614aa16023913981600181518110610bc557610bc561447c565b602090810291909101015286516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c8291908101906144db565b81600281518110610c9557610c9561447c565b6020908102919091018101919091528701516040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610d6c91908101906144db565b81600381518110610d7f57610d7f61447c565b602090810291909101015260408781015190517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e5491908101906144db565b81600481518110610e6757610e6761447c565b602090810291909101015260608701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f2791908101906144db565b81600581518110610f3a57610f3a61447c565b602090810291909101015260808701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610fb4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ffa91908101906144db565b8160068151811061100d5761100d61447c565b602090810291909101015260a08701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611087573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110cd91908101906144db565b816007815181106110e0576110e061447c565b602090810291909101015260c08701516040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d916371aad10d9161113f9190600401614346565b600060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111a291908101906144db565b816008815181106111b5576111b561447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906112139085906004016142c6565b6000604051808303816000875af1158015611232573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112789190810190614544565b90506000806000806000858060200190518101906112969190614631565b939f50919d509b50995097505050505050505091939590929450565b6060600e805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b6040805160038082526080820190925260009182918291816020015b606081526020019060019003908161133b579050509050604051806060016040528060318152602001614a2e603191398160008151811061137e5761137e61447c565b60200260200101819052506040518060400160405280601481526020017f6465636f646556657273696f6e65644e6f6e6365000000000000000000000000815250816001815181106113d2576113d261447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611446573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261148c91908101906144db565b8160028151811061149f5761149f61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906114fd9085906004016142c6565b6000604051808303816000875af115801561151c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115629190810190614544565b9050808060200190518101906115789190614695565b935093505050915091565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561168b57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561167357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116116205790505b505050505081525050815260200190600101906115a7565b50505050905090565b60408051600580825260c08201909252600091606091829182918591816020015b60608152602001906001900390816116b55790505090506040518060400160405280601a81526020017f2e2f746573742d636173652d67656e657261746f722f66757a7a000000000000815250816000815181106117155761171561447c565b60200260200101819052506040518060400160405280600281526020017f2d6d000000000000000000000000000000000000000000000000000000000000815250816001815181106117695761176961447c565b60200260200101819052506040518060400160405280600481526020017f7472696500000000000000000000000000000000000000000000000000000000815250816002815181106117bd576117bd61447c565b60200260200101819052506040518060400160405280600281526020017f2d76000000000000000000000000000000000000000000000000000000000000815250816003815181106118115761181161447c565b602002602001018190525085816004815181106118305761183061447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061188b9084906004016142c6565b6000604051808303816000875af11580156118aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118f09190810190614544565b80602001905181019061190391906146b9565b9450945094509450509193509193565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561168b5783829060005260206000200180546119569061474b565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061474b565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b505050505081526020019060010190611937565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561168b57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015611ad357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a805790505b50505050508152505081526020019060010190611a07565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611b08579050509050604051806060016040528060318152602001614a2e6031913981600081518110611b4b57611b4b61447c565b60200260200101819052506040518060400160405280601881526020017f656e636f646543726f7373446f6d61696e4d657373616765000000000000000081525081600181518110611b9f57611b9f61447c565b60209081029190910101526040517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481018a9052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c5991908101906144db565b81600281518110611c6c57611c6c61447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611cf5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611d3b91908101906144db565b81600381518110611d4e57611d4e61447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e1d91908101906144db565b81600481518110611e3057611e3061447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611eea91908101906144db565b81600581518110611efd57611efd61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fb791908101906144db565b81600681518110611fca57611fca61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561203e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261208491908101906144db565b816007815181106120975761209761447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906120f2908690600401614346565b600060405180830381865afa15801561210f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261215591908101906144db565b816008815181106121685761216861447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906121c69085906004016142c6565b6000604051808303816000875af11580156121e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261222b9190810190614544565b905080806020019051810190610a389190614544565b60408051600b8082526101808201909252600091829190816020015b606081526020019060019003908161225d579050509050604051806060016040528060318152602001614a2e60319139816000815181106122a0576122a061447c565b60200260200101819052506040518060400160405280601681526020017f686173684465706f7369745472616e73616374696f6e00000000000000000000815250816001815181106122f4576122f461447c565b6020026020010181905250604051806080016040528060428152602001614a5f604291398160028151811061232b5761232b61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156123a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526123ee91908101906144db565b816003815181106124015761240161447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa15801561248a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526124d091908101906144db565b816004815181106124e3576124e361447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa15801561256c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125b291908101906144db565b816005815181106125c5576125c561447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612639573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261267f91908101906144db565b816006815181106126925761269261447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101889052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612706573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261274c91908101906144db565b8160078151811061275f5761275f61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156127d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261281991908101906144db565b8160088151811061282c5761282c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156128a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128ef91908101906144db565b816009815181106129025761290261447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d9061295d908790600401614346565b600060405180830381865afa15801561297a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129c091908101906144db565b81600a815181106129d3576129d361447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612a319085906004016142c6565b6000604051808303816000875af1158015612a50573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612a969190810190614544565b905080806020019051810190612aac9190614579565b9b9a5050505050505050505050565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561168b578382906000526020600020018054612afe9061474b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2a9061474b565b8015612b775780601f10612b4c57610100808354040283529160200191612b77565b820191906000526020600020905b815481529060010190602001808311612b5a57829003601f168201915b505050505081526020019060010190612adf565b6040805160098082526101408201909252600091829190816020015b6060815260200190600190039081612ba7579050509050604051806060016040528060318152602001614a2e6031913981600081518110612bea57612bea61447c565b60200260200101819052506040518060400160405280601681526020017f6861736843726f7373446f6d61696e4d65737361676500000000000000000000815250816001815181106103965761039661447c565b60008054610100900460ff1615612c5e5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612d995760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091612d03917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161479e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d3b916147e6565b6000604051808303816000865af19150503d8060008114612d78576040519150601f19603f3d011682016040523d82523d6000602084013e612d7d565b606091505b5091505080806020019051810190612d959190614813565b9150505b919050565b60408051600680825260e08201909252600091829190816020015b6060815260200190600190039081612db9579050509050604051806060016040528060318152602001614a2e6031913981600081518110612dfc57612dfc61447c565b60200260200101819052506040518060400160405280601381526020017f686173684f7574707574526f6f7450726f6f660000000000000000000000000081525081600181518110612e5057612e5061447c565b6020908102919091010152612e6486613a77565b81600281518110612e7757612e7761447c565b6020908102919091010152612e8b85613a77565b81600381518110612e9e57612e9e61447c565b6020908102919091010152612eb284613a77565b81600481518110612ec557612ec561447c565b6020908102919091010152612ed983613a77565b81600581518110612eec57612eec61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612f4a9085906004016142c6565b6000604051808303816000875af1158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612faf9190810190614544565b905080806020019051810190612fc59190614579565b979650505050505050565b60408051600c8082526101a0820190925260609160009190816020015b6060815260200190600190039081612fed579050509050604051806060016040528060318152602001614a2e60319139816000815181106130305761303061447c565b60200260200101819052506040518060400160405280601881526020017f656e636f64654465706f7369745472616e73616374696f6e0000000000000000815250816001815181106130845761308461447c565b602090810291909101810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e906130bb90860186614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015613124573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261316a91908101906144db565b8160028151811061317d5761317d61447c565b60200260200101819052507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166356ca623e8460200160208101906131da9190614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015613243573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328991908101906144db565b8160038151811061329c5761329c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260608401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015613313573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261335991908101906144db565b8160048151811061336c5761336c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260808401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261342991908101906144db565b8160058151811061343c5761343c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260a08401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156134b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526134f991908101906144db565b8160068151811061350c5761350c61447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d636900a3ae61354160e0860160c0870161484b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381865afa15801561359e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135e491908101906144db565b816007815181106135f7576135f761447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371dce7da61362c6060860160408701614866565b6040518263ffffffff1660e01b815260040161364c911515815260200190565b600060405180830381865afa158015613669573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526136af91908101906144db565b816008815181106136c2576136c261447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371aad10d6136f460e0860186614883565b6040518363ffffffff1660e01b81526004016137119291906148ef565b600060405180830381865afa15801561372e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261377491908101906144db565b816009815181106137875761378761447c565b60209081029190910101526040517fb11a19e80000000000000000000000000000000000000000000000000000000081526101008401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b11a19e890602401600060405180830381865afa1580156137ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261384591908101906144db565b81600a815181106138585761385861447c565b60209081029190910101526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526101208401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156138d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261391691908101906144db565b81600b815181106139295761392961447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906139879085906004016142c6565b6000604051808303816000875af11580156139a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526139ec9190810190614544565b905080806020019051810190613a029190614544565b949350505050565b6060600c805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b606081600003613aba57505060408051808201909152600481527f3078303000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613add5780613ace8161496b565b915050600882901c9150613abe565b613a02848260606000613af18360026149a3565b613afc9060026149e0565b67ffffffffffffffff811115613b1457613b14613d54565b6040519080825280601f01601f191660200182016040528015613b3e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613b7557613b7561447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613bd857613bd861447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613c148460026149a3565b613c1f9060016149e0565b90505b6001811115613cbc577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613c6057613c6061447c565b1a60f81b828281518110613c7657613c7661447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613cb5816149f8565b9050613c22565b508315613d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640160405180910390fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d9957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715613da657613da6613d54565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613df357613df3613d54565b604052919050565b600067ffffffffffffffff821115613e1557613e15613d54565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000613e54613e4f84613dfb565b613dac565b9050828152838383011115613e6857600080fd5b828260208301376000602084830101529392505050565b600082601f830112613e9057600080fd5b613d2983833560208501613e41565b600080600080600080600060e0888a031215613eba57600080fd5b87359650613eca60208901613d30565b9550613ed860408901613d30565b9450606088013593506080880135925060a0880135915060c088013567ffffffffffffffff811115613f0957600080fd5b613f158a828b01613e7f565b91505092959891949750929550565b6020808252825182820181905260009190848201906040850190845b81811015613f7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613f40565b50909695505050505050565b600060208284031215613f9057600080fd5b813567ffffffffffffffff80821115613fa857600080fd5b9083019060e08286031215613fbc57600080fd5b613fc4613d83565b82358152613fd460208401613d30565b6020820152613fe560408401613d30565b6040820152606083013560608201526080830135608082015260a083013560a082015260c08301358281111561401a57600080fd5b61402687828601613e7f565b60c08301525095945050505050565b60005b83811015614050578181015183820152602001614038565b8381111561405f576000848401525b50505050565b6000815180845261407d816020860160208601614035565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156140f75782840389526140e5848351614065565b988501989350908401906001016140cd565b5091979650505050505050565b85815284602082015283604082015282606082015260a060808201526000612fc560a08301846140af565b60006020828403121561414157600080fd5b5035919050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561422f578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b8083101561421a5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906141d8565b50978a01979550505091870191600101614170565b50919998505050505050505050565b60006020828403121561425057600080fd5b813567ffffffffffffffff81111561426757600080fd5b8201601f8101841361427857600080fd5b613a0284823560208401613e41565b8481526080602082015260006142a06080830186614065565b82810360408401526142b28186614065565b90508281036060840152612fc581856140af565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614339577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614327858351614065565b945092850192908501906001016142ed565b5092979650505050505050565b602081526000613d296020830184614065565b803567ffffffffffffffff81168114612d9957600080fd5b600080600080600080600080610100898b03121561438e57600080fd5b61439789613d30565b97506143a560208a01613d30565b96506040890135955060608901359450608089013593506143c860a08a01614359565b925060c089013567ffffffffffffffff8111156143e457600080fd5b6143f08b828c01613e7f565b9250506143ff60e08a01614359565b90509295985092959890939650565b6000806000806080858703121561442457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561445257600080fd5b813567ffffffffffffffff81111561446957600080fd5b82016101408185031215613d2957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144b9613e4f84613dfb565b90508281528383830111156144cd57600080fd5b613d29836020830184614035565b6000602082840312156144ed57600080fd5b815167ffffffffffffffff81111561450457600080fd5b8201601f8101841361451557600080fd5b613a02848251602084016144ab565b600082601f83011261453557600080fd5b613d29838351602085016144ab565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b613a0284828501614524565b60006020828403121561458b57600080fd5b5051919050565b600082601f8301126145a357600080fd5b8151602067ffffffffffffffff808311156145c0576145c0613d54565b8260051b6145cf838201613dac565b93845285810183019383810190888611156145e957600080fd5b84880192505b85831015614625578251848111156146075760008081fd5b6146158a87838c0101614524565b83525091840191908401906145ef565b98975050505050505050565b600080600080600060a0868803121561464957600080fd5b85519450602086015193506040860151925060608601519150608086015167ffffffffffffffff81111561467c57600080fd5b61468888828901614592565b9150509295509295909350565b600080604083850312156146a857600080fd5b505080516020909101519092909150565b600080600080608085870312156146cf57600080fd5b84519350602085015167ffffffffffffffff808211156146ee57600080fd5b6146fa88838901614524565b9450604087015191508082111561471057600080fd5b61471c88838901614524565b9350606087015191508082111561473257600080fd5b5061473f87828801614592565b91505092959194509250565b600181811c9082168061475f57607f821691505b602082108103614798577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516147d8816004850160208701614035565b919091016004019392505050565b600082516147f8818460208701614035565b9190910192915050565b801515811461481057600080fd5b50565b60006020828403121561482557600080fd5b8151613d2981614802565b60006020828403121561484257600080fd5b613d2982613d30565b60006020828403121561485d57600080fd5b613d2982614359565b60006020828403121561487857600080fd5b8135613d2981614802565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148b857600080fd5b83018035915067ffffffffffffffff8211156148d357600080fd5b6020019150368190038213156148e857600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361499c5761499c61493c565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149db576149db61493c565b500290565b600082198211156149f3576149f361493c565b500190565b600081614a0757614a0761493c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe736372697074732f646966666572656e7469616c2d74657374696e672f646966666572656e7469616c2d74657374696e6730783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303067657450726f76655769746864726177616c5472616e73616374696f6e496e70757473a164736f6c634300080f000aa164736f6c634300080f000a0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000",
  "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000e55760003560e01c8063916a17c6116200008b578063bcfceff21162000062578063bcfceff2146200018d578063e20c9f7114620001a4578063fa7626d414620001ae57600080fd5b8063916a17c6146200015e578063b5508aa91462000168578063ba414fa6146200017257600080fd5b80633f7286f411620000c05780633f7286f4146200012257806366d9a9a0146200012c57806385226c81146200014557600080fd5b80630a9254e414620000ea5780631ed7831c14620000f65780633e5e3c231462000118575b600080fd5b620000f4620001bc565b005b6200010062001cd4565b6040516200010f919062004a78565b60405180910390f35b6200010062001d45565b6200010062001db4565b6200013662001e23565b6040516200010f919062004ad4565b6200014f62001f38565b6040516200010f919062004c49565b6200013662002012565b6200014f6200211e565b6200017c620021f8565b60405190151581526020016200010f565b620000f46200019e36600462004ccd565b62002362565b6200010062002477565b6000546200017c9060ff1681565b620001c6620024e6565b604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001060048201526024810191909152601060448201527f4c325374616e64617264427269646765000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200027657600080fd5b505af11580156200028b573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001260048201526024810191909152601c60448201527f4f7074696d69736d4d696e7461626c654552433230466163746f7279000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b5050601d546040516000935073ffffffffffffffffffffffffffffffffffffffff909116915062000385906200496e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620003bf573d6000803e3d6000fd5b50601d546040805160048152602481018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb794726200000000000000000000000000000000000000000000000000000000179052825160018183015283518082039092018252808401938490527fb96213e400000000000000000000000000000000000000000000000000000000909352939450737109709ecfa91a80626ff3989d68f67f5b1dd12d9363b96213e4936200049f9373ffffffffffffffffffffffffffffffffffffffff90911692919060440162004ce7565b600060405180830381600087803b158015620004ba57600080fd5b505af1158015620004cf573d6000803e3d6000fd5b5050601d546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156200055357600080fd5b505af115801562000568573d6000803e3d6000fd5b5050603354602d5460405173ffffffffffffffffffffffffffffffffffffffff8681169550636c5d4ad094509283169290911690620005a7906200497c565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620005e8573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518263ffffffff1660e01b815260040162000639919062004d36565b600060405180830381600087803b1580156200065457600080fd5b505af115801562000669573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff16633fdf4e156040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620006d957600080fd5b505af1158015620006ee573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000768919062004d52565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b5050603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4c315374616e646172644272696467655f50726f7879000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620008cd57600080fd5b505af1158015620008e2573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810191909152601560448201527f4c315374616e646172644272696467655f496d706c00000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b5050602d546040516000935085925073ffffffffffffffffffffffffffffffffffffffff90911690620009e0906200498a565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000a21573d6000803e3d6000fd5b5090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663b4d6c7827342000000000000000000000000000000000000108373ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000aca92919062004d8a565b600060405180830381600087803b15801562000ae557600080fd5b505af115801562000afa573d6000803e3d6000fd5b5050603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000167342000000000000000000000000000000000000109081179091556040516000935090915062000b529062004998565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000b8c573d6000803e3d6000fd5b5090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663b4d6c7827342000000000000000000000000000000000000128373ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000c3592919062004d8a565b600060405180830381600087803b15801562000c5057600080fd5b505af115801562000c65573d6000803e3d6000fd5b5050603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000167342000000000000000000000000000000000000121790555050602d54604051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163b4d6c7829173deaddeaddeaddeaddeaddeaddeaddeaddead00009173ffffffffffffffffffffffffffffffffffffffff169062000d0190620049a6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000d3b573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b815260040162000d8d92919062004d8a565b600060405180830381600087803b15801562000da857600080fd5b505af115801562000dbd573d6000803e3d6000fd5b5050505060405162000dcf90620049b4565b6040808252600f908201527f4e6174697665204c3120546f6b656e000000000000000000000000000000000060608201526080602082018190526003908201527f4c3154000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801562000e55573d6000803e3d6000fd5b50603980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155603654604080517f06fdde030000000000000000000000000000000000000000000000000000000081529051919093169282916306fdde03916004808201926000929091908290030181865afa15801562000ef9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000f41919081019062004e8d565b60405160200162000f53919062004edb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562000fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001037919081019062004e8d565b60405160200162001049919062004edb565b6040516020818303038152906040526040516200106690620049c2565b62001075949392919062004f22565b604051809103906000f08015801562001092573d6000803e3d6000fd5b50603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152601360448201527f4c65676163794d696e7461626c654552433230000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200117257600080fd5b505af115801562001187573d6000803e3d6000fd5b5050603754603954604080517f06fdde03000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416955063896f93d19450929091169182916306fdde039160048083019260009291908290030181865afa1580156200120b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001253919081019062004e8d565b60405160200162001265919062004f7c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001301573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001349919081019062004e8d565b6040516020016200135b919062004f7c565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016200138a9392919062004ce7565b6020604051808303816000875af1158015620013aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d0919062004d52565b603b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603754603954604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290519284169363896f93d193600193909116916306fdde039160048083019260009291908290030181865afa1580156200147c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620014c4919081019062004e8d565b604051602001620014d6919062004f7c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526039547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001572573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620015ba919081019062004e8d565b604051602001620015cc919062004f7c565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620015fb9392919062004ce7565b6020604051808303816000875af11580156200161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001641919062004d52565b603e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200169490620049b4565b6040808252600f908201527f4e6174697665204c3220546f6b656e000000000000000000000000000000000060608201526080602082018190526003908201527f4c3254000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156200171a573d6000803e3d6000fd5b50603d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603554604051911690620017709062004998565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620017aa573d6000803e3d6000fd5b50603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155603d54604080517f06fdde030000000000000000000000000000000000000000000000000000000081529051929363896f93d19392169182916306fdde039160048083019260009291908290030181865afa15801562001853573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200189b919081019062004e8d565b604051602001620018ad919062004fc3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252603d547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001949573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001991919081019062004e8d565b604051602001620019a3919062004fc3565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620019d29392919062004ce7565b6020604051808303816000875af1158015620019f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a18919062004d52565b603f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603854603d54604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290519284169363896f93d193600193909116916306fdde039160048083019260009291908290030181865afa15801562001ac4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001b0c919081019062004e8d565b60405160200162001b1e919062004fc3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252603d547f95d89b410000000000000000000000000000000000000000000000000000000084529151909273ffffffffffffffffffffffffffffffffffffffff909216916395d89b419160048083019260009291908290030181865afa15801562001bba573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001c02919081019062004e8d565b60405160200162001c14919062004fc3565b6040516020818303038152906040526040518463ffffffff1660e01b815260040162001c439392919062004ce7565b6020604051808303816000875af115801562001c63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c89919062004d52565b603a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801562001d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575b5050505050905090565b6060600f80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b6060600e80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801562001f1657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162001ec25790505b5050505050815250508152602001906001019062001e47565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57838290600052602060002001805462001f7e9062004ffd565b80601f016020809104026020016040519081016040528092919081815260200182805462001fac9062004ffd565b801562001ffd5780601f1062001fd15761010080835404028352916020019162001ffd565b820191906000526020600020905b81548152906001019060200180831162001fdf57829003601f168201915b50505050508152602001906001019062001f5c565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156200210557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620020b15790505b5050505050815250508152602001906001019062002036565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101562001f2f578382906000526020600020018054620021649062004ffd565b80601f0160208091040260200160405190810160405280929190818152602001828054620021929062004ffd565b8015620021e35780601f10620021b757610100808354040283529160200191620021e3565b820191906000526020600020905b815481529060010190602001808311620021c557829003601f168201915b50505050508152602001906001019062002142565b60008054610100900460ff1615620022195750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200235d5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620022c1917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005052565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620022fb916200509c565b6000604051808303816000865af19150503d80600081146200233a576040519150601f19603f3d011682016040523d82523d6000602084013e6200233f565b606091505b5091505080806020019051810190620023599190620050ba565b9150505b919050565b6021546040517fd1de856c00000000000000000000000000000000000000000000000000000000815260048101839052737109709ecfa91a80626ff3989d68f67f5b1dd12d9163e5d6bf029173ffffffffffffffffffffffffffffffffffffffff9091169063d1de856c90602401602060405180830381865afa158015620023ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024149190620050de565b62002421906001620050f8565b6040518263ffffffff1660e01b81526004016200244091815260200190565b600060405180830381600087803b1580156200245b57600080fd5b505af115801562002470573d6000803e3d6000fd5b5050505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801562001d3b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001d0f575050505050905090565b620024f062002ff0565b601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200257057600080fd5b505af115801562002585573d6000803e3d6000fd5b505050506040516200259790620049d0565b604051809103906000f080158015620025b4573d6000803e3d6000fd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055603054602d546040516000939283169291909116906200261690620049de565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002657573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620026db57600080fd5b505af1158015620026f0573d6000803e3d6000fd5b50506032546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250639b2ea4bd91506200274c90849060040162005138565b600060405180830381600087803b1580156200276757600080fd5b505af11580156200277c573d6000803e3d6000fd5b50506032546040516000935073ffffffffffffffffffffffffffffffffffffffff9091169150620027ad90620049ec565b620027b991906200519a565b604051809103906000f080158015620027d6573d6000803e3d6000fd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517f8129fc1c00000000000000000000000000000000000000000000000000000000815290519293509091638129fc1c9160048082019260009290919082900301818387803b1580156200287057600080fd5b505af115801562002885573d6000803e3d6000fd5b5050603354604051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063b4d6c78292507342000000000000000000000000000000000000079173ffffffffffffffffffffffffffffffffffffffff1690620028e390620049fa565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200291d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b81526004016200296f92919062004d8a565b600060405180830381600087803b1580156200298a57600080fd5b505af11580156200299f573d6000803e3d6000fd5b50505050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002a0e57600080fd5b505af115801562002a23573d6000803e3d6000fd5b5050603254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600e60448201527f416464726573734d616e616765720000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ada57600080fd5b505af115801562002aef573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810191909152601b60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f496d706c00000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ba557600080fd5b505af115801562002bba573d6000803e3d6000fd5b5050603354604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152601c60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f50726f7879000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002c7157600080fd5b505af115801562002c86573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273deaddeaddeaddeaddeaddeaddeaddeaddead000060048201526024810191909152600e60448201527f4c656761637945524332304d4e540000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002d3a57600080fd5b505af115801562002d4f573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273deaddeaddeaddeaddeaddeaddeaddeaddead111160048201526024810191909152600e60448201527f4c656761637945524332304554480000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002e0357600080fd5b505af115801562002e18573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000760048201526024810191909152601660448201527f4c3243726f7373446f6d61696e4d657373656e676572000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b15801562002ecc57600080fd5b505af115801562002ee1573d6000803e3d6000fd5b5050603354737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c718915062002f389073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152601e60448201527f4c3143726f7373446f6d61696e4d657373656e6765725f616c6961736564000060648201526084015b600060405180830381600087803b15801562002fd357600080fd5b505af115801562002fe8573d6000803e3d6000fd5b505050505050565b62002ffa62003563565b6000620030806040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b9050600160006127106000801b6301c9c380600086604051620030a39062004a08565b73ffffffffffffffffffffffffffffffffffffffff978816815260208082019790975260408082019690965260608082019590955267ffffffffffffffff9093166080808501919091529690911660a080840191909152815163ffffffff90811660c08501529582015160ff90811660e0850152948201519094166101008301529182015184166101208201529381015190921661014084015201516fffffffffffffffffffffffffffffffff1661016082015261018001604051809103906000f08015801562003178573d6000803e3d6000fd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155602154602a54602d54604051928516949182169360019390929190911690620031e69062004a16565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152911515604084015283166060830152909116608082015260a001604051809103906000f0801580156200323f573d6000803e3d6000fd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d5460405160009291909116906200329a9062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620032d4573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200335857600080fd5b505af11580156200336d573d6000803e3d6000fd5b5050602f5460408051600060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd53a822f0000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681169550634f1ef2869450620034319316919060040162004d8a565b6000604051808303816000875af115801562003451573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262003499919081019062004e8d565b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600e60448201527f4f7074696d69736d506f7274616c0000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189060840162002fb8565b6200356d620037e0565b601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620035ed57600080fd5b505af115801562003602573d6000803e3d6000fd5b5050604051737109709ecfa91a80626ff3989d68f67f5b1dd12d925063b4d6c782915073deaddeaddeaddeaddeaddeaddeaddeaddead111190620036469062004a32565b604051809103906000f08015801562003663573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620036b592919062004d8a565b600060405180830381600087803b158015620036d057600080fd5b505af1158015620036e5573d6000803e3d6000fd5b5050602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673deaddeaddeaddeaddeaddeaddeaddeaddead1111908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600760448201527f42564d5f455448000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620037c557600080fd5b505af1158015620037da573d6000803e3d6000fd5b50505050565b620037ea62003b5b565b604051620037f89062004a40565b604051809103906000f08015801562003815573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d546040516000929190911690620038709062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620038aa573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200392e57600080fd5b505af115801562003943573d6000803e3d6000fd5b5050602c54601d54604080517502ac3a4edbbfb8014e3ba83411e915e8000000000000602482015273ffffffffffffffffffffffffffffffffffffffff92831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fda35a26f0000000000000000000000000000000000000000000000000000000017905290517f4f1ef2860000000000000000000000000000000000000000000000000000000081528683169550634f1ef286945062003a2993929092169160040162004d8a565b6000604051808303816000875af115801562003a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262003a91919081019062004e8d565b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600d60448201527f4c314d616e746c65546f6b656e000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189060840162002440565b62003b65620042ae565b62003ba56040518060400160405280600881526020017f677561726469616e000000000000000000000000000000000000000000000000815250620047ee565b602a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560295462003bfa906001620050f8565b602b8190556040517fe5d6bf020000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e5d6bf0290602401600060405180830381600087803b15801562003c6757600080fd5b505af115801562003c7c573d6000803e3d6000fd5b50506028546040517f1f7b4f300000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250631f7b4f309150602401600060405180830381600087803b15801562003ceb57600080fd5b505af115801562003d00573d6000803e3d6000fd5b50506026546027546028546029546024546025546040519597509395509193909273ffffffffffffffffffffffffffffffffffffffff92831692169062093a809062003d4c9062004a4e565b96875260208701959095526040860193909352606085019190915273ffffffffffffffffffffffffffffffffffffffff90811660808501521660a083015260c082015260e001604051809103906000f08015801562003daf573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601d54604051600092919091169062003e0a9062004a24565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562003e44573d6000803e3d6000fd5b50601d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562003ec857600080fd5b505af115801562003edd573d6000803e3d6000fd5b50506022546028546029546040516024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff8581169450634f1ef286935090911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe4a3011600000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815262003fd092919060040162004d8a565b6000604051808303816000875af115801562003ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004038919081019062004e8d565b50602180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101929092526024820152600e60448201527f4c324f75747075744f7261636c650000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890608401600060405180830381600087803b1580156200411757600080fd5b505af11580156200412c573d6000803e3d6000fd5b5050604051737109709ecfa91a80626ff3989d68f67f5b1dd12d925063b4d6c782915073420000000000000000000000000000000000001690620041709062004a5c565b604051809103906000f0801580156200418d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620041df92919062004d8a565b600060405180830381600087803b158015620041fa57600080fd5b505af11580156200420f573d6000803e3d6000fd5b5050604080517fc657c71800000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000001660048201526024810191909152601360448201527f4c32546f4c314d657373616765506173736572000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c718915060840162002440565b601b546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156200433757600080fd5b505af11580156200434c573d6000803e3d6000fd5b5050601c546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015620043d957600080fd5b505af1158015620043ee573d6000803e3d6000fd5b5050601d546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152620100006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156200447b57600080fd5b505af115801562004490573d6000803e3d6000fd5b5050601b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600560448201527f616c6963650000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200454757600080fd5b505af11580156200455c573d6000803e3d6000fd5b5050601c54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600360448201527f626f6200000000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b1580156200461357600080fd5b505af115801562004628573d6000803e3d6000fd5b5050601d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152600860448201527f6d756c74697369670000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c7189150608401600060405180830381600087803b158015620046df57600080fd5b505af1158015620046f4573d6000803e3d6000fd5b50506040517f39b37ab0000000000000000000000000000000000000000000000000000000008152633b9aca006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506339b37ab09150602401600060405180830381600087803b1580156200476257600080fd5b505af115801562004777573d6000803e3d6000fd5b50505050604051620047899062004a6a565b604051809103906000f080158015620047a6573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000620047fb8262004802565b5092915050565b600080826040516020016200481891906200509c565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620048b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048de919062004d52565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189062004935908590879060040162004d8a565b600060405180830381600087803b1580156200495057600080fd5b505af115801562004965573d6000803e3d6000fd5b50505050915091565b610a4480620051f583390190565b61394d8062005c3983390190565b61395f806200958683390190565b612435806200cee583390190565b61112b806200f31a83390190565b610e3c806201044583390190565b611560806201128183390190565b61066d80620127e183390190565b6129cf8062012e4e83390190565b6105f0806201581d83390190565b6126098062015e0d83390190565b6122d2806201841683390190565b61608c806201a6e883390190565b610918806202077483390190565b6117e6806202108c83390190565b613cad806202287283390190565b611b02806202651f83390190565b610b1e806202802183390190565b614b0d8062028b3f83390190565b6020808252825182820181905260009190848201906040850190845b8181101562004ac857835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010162004a94565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101562004bbf578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b8083101562004ba95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b019062004b65565b50978a0197955050509187019160010162004afc565b50919998505050505050505050565b60005b8381101562004beb57818101518382015260200162004bd1565b83811115620037da5750506000910152565b6000815180845262004c1781602086016020860162004bce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562004cc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845262004cad85835162004bfd565b9450928501929085019060010162004c70565b5092979650505050505050565b60006020828403121562004ce057600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600062004d18606083018562004bfd565b828103604084015262004d2c818562004bfd565b9695505050505050565b60208152600062004d4b602083018462004bfd565b9392505050565b60006020828403121562004d6557600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811462004d4b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062004dbb604083018462004bfd565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111562004e105762004e1062004dc3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562004e595762004e5962004dc3565b8160405280935085815286868601111562004e7357600080fd5b62004e8386602083018762004bce565b5050509392505050565b60006020828403121562004ea057600080fd5b815167ffffffffffffffff81111562004eb857600080fd5b8201601f8101841362004eca57600080fd5b62004dbb8482516020840162004df2565b7f4c65676163794c322d000000000000000000000000000000000000000000000081526000825162004f1581600985016020870162004bce565b9190910160090192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015262004f5d608083018562004bfd565b828103606084015262004f71818562004bfd565b979650505050505050565b7f4c322d000000000000000000000000000000000000000000000000000000000081526000825162004fb681600385016020870162004bce565b9190910160030192915050565b7f4c312d000000000000000000000000000000000000000000000000000000000081526000825162004fb681600385016020870162004bce565b600181811c908216806200501257607f821691505b6020821081036200504c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200508e81600485016020870162004bce565b919091016004019392505050565b60008251620050b081846020870162004bce565b9190910192915050565b600060208284031215620050cd57600080fd5b8151801515811462004d4b57600080fd5b600060208284031215620050f157600080fd5b5051919050565b6000821982111562005133577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b6040815260006200517660408301601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b73ffffffffffffffffffffffffffffffffffffffff8216815260406020820152600062004d4b60408301601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000060208201526040019056fe608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b506040516200394d3803806200394d83398101604081905262000035916200008f565b6001600160a01b0391821660805273420000000000000000000000000000000000001060a052600160c081905260e0526000610100521661012052620000ce565b6001600160a01b03811681146200008c57600080fd5b50565b60008060408385031215620000a357600080fd5b8251620000b08162000076565b6020840151909250620000c38162000076565b809150509250929050565b60805160a05160c05160e0516101005161012051613787620001c66000396000818161050b015281816117a301528181611db901528181611e5001526120b501526000611108015260006110df015260006110b60152600081816103b70152818161046e015281816105e101528181610ac2015281816115fb0152818161191901528181611f9a01526123ea0152600081816102d3015281816104a4015281816105b70152818161061801528181610a9801528181610af901528181610d86015281816115d101528181611632015281816117c5015281816118db01528181611e1e01528181611f5c01526123ad01526137876000f3fe60806040526004361061019a5760003560e01c8063838b2520116100e1578063a9f9e6751161008a578063c8beb96511610064578063c8beb96514610540578063e11013dd14610553578063f407a99e14610566578063f82b418e1461057957600080fd5b8063a9f9e675146104d9578063ac6986c5146104f9578063b1a1a8821461052d57600080fd5b806391c49bf8116100bb57806391c49bf81461045f578063927ede2d146104925780639a2ac6d5146104c657600080fd5b8063838b2520146103d957806387087623146103f95780638f601f661461041957600080fd5b80634188f7f11161014357806358a997f61161011d57806358a997f61461037257806369516df5146103925780637f46ddb2146103a557600080fd5b80634188f7f11461031d578063540abf731461033057806354fd4d501461035057600080fd5b80631635f5fd116101745780631635f5fd1461029e57806324e00ccb146102b15780633cb747bf146102c457600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d406040518060200160405280600081525061058c565b005b600080fd5b34801561026457600080fd5b50610251610273366004612fcf565b61059f565b610251610286366004613080565b610995565b6102516102993660046130d3565b610a6c565b6102516102ac3660046130d3565b610a80565b6102516102bf366004613146565b610f55565b3480156102d057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61025161032b3660046131a0565b611027565b34801561033c57600080fd5b5061025161034b3660046131f4565b61106a565b34801561035c57600080fd5b506103656110af565b60405161031491906132e1565b34801561037e57600080fd5b5061025161038d3660046132f4565b611152565b6102516103a0366004613377565b611226565b3480156103b157600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e557600080fd5b506102516103f43660046131f4565b611269565b34801561040557600080fd5b506102516104143660046132f4565b6112ae565b34801561042557600080fd5b506104516104343660046133af565b600360209081526000928352604080842090915290825290205481565b604051908152602001610314565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f3565b34801561049e57600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102516104d43660046133e8565b611382565b3480156104e557600080fd5b506102516104f4366004612fcf565b6113c4565b34801561050557600080fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b61025161053b366004613080565b6113d3565b61025161054e366004613146565b6114a4565b6102516105613660046133e8565b611576565b6102516105743660046130d3565b6115b9565b6102516105873660046130d3565b61182d565b610599848434858561183a565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156106bd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b61077887611a25565b156108c6576107878787611a87565b610839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50505050610948565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a1683529290522054610904908490613463565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c1683529390529190912091909155610948908585611ba7565b61098c878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7b92505050565b50505050505050565b333b15610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610a673333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183a92505050565b505050565b610a798585858585610a80565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610b9e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b823414610cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610d84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610ea185858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d0992505050565b6000610ebe855a8660405180602001604052806000815250611d7c565b905080610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b333b15610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b6105993333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9692505050565b610a793385878686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9f92505050565b61098c87873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd892505050565b60606110da7f00000000000000000000000000000000000000000000000000000000000000006124fc565b6111037f00000000000000000000000000000000000000000000000000000000000000006124fc565b61112c7f00000000000000000000000000000000000000000000000000000000000000006124fc565b60405160200161113e9392919061347a565b604051602081830303815290604052905090565b333b156111e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610f4d86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263992505050565b610a793386868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9692505050565b61098c87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263992505050565b333b1561133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610f4d86863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd892505050565b61059933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061058c92505050565b61098c8787878787878761059f565b333b15611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610a6733338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061058c92505050565b333b15611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b6105993333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d9f92505050565b6105993385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183a92505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156116d757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190613417565b73ffffffffffffffffffffffffffffffffffffffff16145b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6117eb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008686612648565b610a7985858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126a692505050565b610a7985858585856115b9565b8234146118cb57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4c315374616e646172644272696467653a206272696467696e6720455448206d60448201527f75737420696e636c7564652073756666696369656e74204554482076616c7565606482015260840161022a565b6118d785858584612719565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034837f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b8b8b8b8a60405160240161195794939291906134f0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b90921682526119eb9392918a90600401613539565b6000604051808303818588803b158015611a0457600080fd5b505af1158015611a18573d6000803e3d6000fd5b5050505050505050505050565b6000611a51827f1d1d8b630000000000000000000000000000000000000000000000000000000061278c565b80611a815750611a81827fec4fc8e30000000000000000000000000000000000000000000000000000000061278c565b92915050565b6000611ab3837f1d1d8b630000000000000000000000000000000000000000000000000000000061278c565b15611b5c578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b279190613417565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a81565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a679084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526127af565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cf393929190613585565b60405180910390a4610f4d8686868686866128bb565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d689291906135c3565b60405180910390a361059984848484612943565b600080600080845160208601878a8af19695505050505050565b610a7985858585855b611de173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016863086612648565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590526000917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf91906135dc565b905080611f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c315374616e646172644272696467653a20617070726f766520666f72204c3160448201527f204d4e54206661696c65642e0000000000000000000000000000000000000000606482015260840161022a565b611f5a868686856129b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034867f000000000000000000000000000000000000000000000000000000000000000063f407a99e60e01b8b8b8b8a60405160240161195794939291906134f0565b73ffffffffffffffffffffffffffffffffffffffff871615801590612027575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead111114155b6120b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c315374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f727420455448206272696467696e672e000000000000606482015260840161022a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612124575073ffffffffffffffffffffffffffffffffffffffff861615155b6121b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c315374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f7274204d4e54206272696467696e672e000000000000606482015260840161022a565b6121b987611a25565b15612307576121c88787611a87565b61227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156122ea57600080fd5b505af11580156122fe573d6000803e3d6000fd5b5050505061239b565b61232973ffffffffffffffffffffffffffffffffffffffff8816863086612648565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546123679084906135fe565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b6123a9878787878786612a23565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e300827f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8b8d8c8c8c8b60405160240161242c96959493929190613616565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526124c09392918990600401613539565b600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b505050505050505050505050565b60608160000361253f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612569578061255381613671565b91506125629050600a836136d8565b9150612543565b60008167ffffffffffffffff811115612584576125846136ec565b6040519080825280601f01601f1916602001820160405280156125ae576020820181803683370190505b5090505b8415612631576125c3600183613463565b91506125d0600a8661371b565b6125db9060306135fe565b60f81b8183815181106125f0576125f061372f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061262a600a866136d8565b94506125b2565b949350505050565b61098c87878787878787611fd8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105999085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bf9565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd140b1626a1caf5ae4717fcfdace5983543949ab0d32ceb0ca635c3913983e2884846040516127059291906135c3565b60405180910390a361059984848484612ab1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516127789291906135c3565b60405180910390a361059984848484612b10565b600061279783612b6f565b80156127a857506127a88383612bd3565b9392505050565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ca29092919063ffffffff16565b805190915015610a67578080602001905181019061282f91906135dc565b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161293393929190613585565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516129a29291906135c3565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f321b860de8dcec5080cae77af335971688a4c0bc3d79d6cf3d6f2cc3894798bc8484604051612a0f9291906135c3565b60405180910390a361059984848484612cb1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396868686604051612a9b93929190613585565b60405180910390a4610f4d868686868686612d10565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fef2dd684d0d947aa195ea84c18e3b5c457d3462c09eb29b20aac4f7d4d4f003584846040516129a29291906135c3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516129a29291906135c3565b6000612b9b827f01ffc9a700000000000000000000000000000000000000000000000000000000612bd3565b8015611a815750612bcc827fffffffff00000000000000000000000000000000000000000000000000000000612bd3565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612c8b575060208210155b8015612c975750600081115b979650505050505050565b60606126318484600085612d88565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f74bbfec0d26a17c2367408038090a9a4e1cd1671129dc8fdf57f146a499fe3d584846040516129a29291906135c3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161293393929190613585565b606082471015612e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b612e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ec1919061375e565b60006040518083038185875af1925050503d8060008114612efe576040519150601f19603f3d011682016040523d82523d6000602084013e612f03565b606091505b5091509150612c9782828660608315612f1d5750816127a8565b825115612f2d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a91906132e1565b73ffffffffffffffffffffffffffffffffffffffff81168114612f8357600080fd5b50565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600080600080600060c0888a031215612fea57600080fd5b8735612ff581612f61565b9650602088013561300581612f61565b9550604088013561301581612f61565b9450606088013561302581612f61565b93506080880135925060a088013567ffffffffffffffff81111561304857600080fd5b6130548a828b01612f86565b989b979a50959850939692959293505050565b803563ffffffff8116811461307b57600080fd5b919050565b60008060006040848603121561309557600080fd5b61309e84613067565b9250602084013567ffffffffffffffff8111156130ba57600080fd5b6130c686828701612f86565b9497909650939450505050565b6000806000806000608086880312156130eb57600080fd5b85356130f681612f61565b9450602086013561310681612f61565b935060408601359250606086013567ffffffffffffffff81111561312957600080fd5b61313588828901612f86565b969995985093965092949392505050565b6000806000806060858703121561315c57600080fd5b8435935061316c60208601613067565b9250604085013567ffffffffffffffff81111561318857600080fd5b61319487828801612f86565b95989497509550505050565b6000806000806000608086880312156131b857600080fd5b8535945060208601356131ca81612f61565b93506131d860408701613067565b9250606086013567ffffffffffffffff81111561312957600080fd5b600080600080600080600060c0888a03121561320f57600080fd5b873561321a81612f61565b9650602088013561322a81612f61565b9550604088013561323a81612f61565b94506060880135935061324f60808901613067565b925060a088013567ffffffffffffffff81111561304857600080fd5b60005b8381101561328657818101518382015260200161326e565b838111156105995750506000910152565b600081518084526132af81602086016020860161326b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127a86020830184613297565b60008060008060008060a0878903121561330d57600080fd5b863561331881612f61565b9550602087013561332881612f61565b94506040870135935061333d60608801613067565b9250608087013567ffffffffffffffff81111561335957600080fd5b61336589828a01612f86565b979a9699509497509295939492505050565b60008060008060006080868803121561338f57600080fd5b853561339a81612f61565b9450602086013593506131d860408701613067565b600080604083850312156133c257600080fd5b82356133cd81612f61565b915060208301356133dd81612f61565b809150509250929050565b600080600080606085870312156133fe57600080fd5b843561340981612f61565b935061316c60208601613067565b60006020828403121561342957600080fd5b81516127a881612f61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561347557613475613434565b500390565b6000845161348c81846020890161326b565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516134c8816001850160208a0161326b565b600192019182015283516134e381600284016020880161326b565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261352f6080830184613297565b9695505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260806040820152600061356e6080830185613297565b905063ffffffff8316606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006135ba6060830184613297565b95945050505050565b8281526040602082015260006126316040830184613297565b6000602082840312156135ee57600080fd5b815180151581146127a857600080fd5b6000821982111561361157613611613434565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261366560c0830184613297565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a2576136a2613434565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136e7576136e76136a9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261372a5761372a6136a9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825161377081846020870161326b565b919091019291505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b506040516200395f3803806200395f83398101604081905262000035916200008f565b7342000000000000000000000000000000000000076080526001600160a01b0391821660a052600160c081905260e0526000610100521661012052620000ce565b6001600160a01b03811681146200008c57600080fd5b50565b60008060408385031215620000a357600080fd5b8251620000b08162000076565b6020840151909250620000c38162000076565b809150509250929050565b60805160a05160c05160e05161010051610120516137a0620001bf6000396000818161046d015281816111b1015281816118fd0152818161216f01526126fb0152600061111d015260006110f4015260006110cb0152600081816102820152818161038c0152818161057f015281816106cd01528181610b9b0152818161141a01528181611d7301526124830152600081816102db0152818161042601528181610541015281816106a30152818161070401528181610b7101528181610bd201528181610dd0015281816113f001528181611451015281816116de01528181611d35015261244501526137a06000f3fe6080604052600436106101485760003560e01c806354fd4d50116100c05780638f601f6611610074578063a3a7954811610059578063a3a7954814610448578063ac6986c51461045b578063f407a99e1461048f57600080fd5b80638f601f66146103ce578063927ede2d1461041457600080fd5b8063662a633a116100a5578063662a633a146103675780637f46ddb21461037a57806387087623146103ae57600080fd5b806354fd4d501461033257806357eccc341461035457600080fd5b806332b7006d116101175780633cb747bf116100fc5780633cb747bf146102cc578063540abf73146102ff578063548e0a5c1461031f57600080fd5b806332b7006d1461026057806336c717c11461027357600080fd5b80630166a07a14610207578063162f1686146102275780631635f5fd1461023a57806324ca60181461024d57600080fd5b3661020257333b156101e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61020033333462030d40604051806020016040528060008152506104a2565b005b600080fd5b34801561021357600080fd5b50610200610222366004612fe8565b61068b565b610200610235366004613099565b610a81565b6102006102483660046130f3565b610b59565b61020061025b366004613166565b610f26565b61020061026e3660046131ba565b610f69565b34801561027f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102d857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102a2565b34801561030b57600080fd5b5061020061031a3660046131f2565b61103c565b61020061032d366004613269565b611081565b34801561033e57600080fd5b506103476110c4565b6040516102c3919061330e565b610200610362366004613321565b611167565b610200610375366004612fe8565b6111af565b34801561038657600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506102006103c9366004613374565b6112b8565b3480156103da57600080fd5b506104066103e93660046133f7565b600360209081526000928352604080842090915290825290205481565b6040519081526020016102c3565b34801561042057600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b610200610456366004613374565b611394565b34801561046757600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b61020061049d3660046130f3565b6113d8565b823414610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e67204d4e54206d757360448201527f7420696e636c7564652073756666696369656e74204d4e542076616c7565000060648201526084016101d8565b61053d858585846118cc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034837f000000000000000000000000000000000000000000000000000000000000000063f407a99e60e01b8b8b8b8a6040516024016105bd9493929190613430565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b90921682526106519392918a90600401613479565b6000604051808303818588803b15801561066a57600080fd5b505af115801561067e573d6000803e3d6000fd5b5050505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156107a957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079191906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b61085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b61086487611979565b156109b25761087387876119db565b610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101d8565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099557600080fd5b505af11580156109a9573d6000803e3d6000fd5b50505050610a34565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546109f0908490613511565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600360209081526040808320948c1683529390529190912091909155610a34908585611afb565b610a78878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcf92505050565b50505050505050565b333b15610b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b610b533333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5d92505050565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610c7757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f91906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b610d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b3073ffffffffffffffffffffffffffffffffffffffff851603610dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101d8565b610edd73deaddeaddeaddeaddeaddeaddeaddeaddead11117342000000000000000000000000000000000000078686611e7e565b610f1f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611edc92505050565b5050505050565b610f1f3385878686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5d92505050565b333b15610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b610f1f853333878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f7d92505050565b610a7887873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061207292505050565b610b533385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104a292505050565b60606110ef7f0000000000000000000000000000000000000000000000000000000000000000612573565b6111187f0000000000000000000000000000000000000000000000000000000000000000612573565b6111417f0000000000000000000000000000000000000000000000000000000000000000612573565b60405160200161115393929190613528565b604051602081830303815290604052905090565b6111aa3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104a292505050565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611233575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b1561124a5761124585858585856113d8565b610a78565b73ffffffffffffffffffffffffffffffffffffffff8716158015611297575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead1111145b156112a9576112458585858585610b59565b610a788688878787878761068b565b333b15611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101d8565b61138c86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061207292505050565b505050505050565b61138c863387878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f7d92505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156114f657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de91906134c5565b73ffffffffffffffffffffffffffffffffffffffff16145b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101d8565b823414611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101d8565b3073ffffffffffffffffffffffffffffffffffffffff8516036116dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101d8565b60006117fb855a8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126b092505050565b90508061188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a204d4e54207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101d8565b61138c86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126ca92505050565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516119659392919061359e565b60405180910390a4610b5384848484612777565b60006119a5827f1d1d8b63000000000000000000000000000000000000000000000000000000006127e4565b806119d557506119d5827fec4fc8e3000000000000000000000000000000000000000000000000000000006127e4565b92915050565b6000611a07837f1d1d8b63000000000000000000000000000000000000000000000000000000006127e4565b15611ab0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b91906134c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161490506119d5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526111aa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612807565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611c479392919061359e565b60405180910390a461138c868686868686612913565b611c7d73deaddeaddeaddeaddeaddeaddeaddeaddead1111333086611e7e565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000760048201526024810184905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af1158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2691906135dc565b50611d338585858461299b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30034857f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b8a8a8a89604051602401611db19493929190613430565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e087901b9092168252611e459392918990600401613479565b6000604051808303818588803b158015611e5e57600080fd5b505af1158015611e72573d6000803e3d6000fd5b50505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610b539085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b4d565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead111173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611f699392919061359e565b60405180910390a4610b5384848484612a3c565b7fffffffffffffffffffffffff215221522152215221522152215221522152eeef73ffffffffffffffffffffffffffffffffffffffff871601611fcc57611fc78585858585611c5d565b61138c565b73ffffffffffffffffffffffffffffffffffffffff8616611ff457611fc785858585856104a2565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612041573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206591906134c5565b9050610a78878288888888885b73ffffffffffffffffffffffffffffffffffffffff871673deaddeaddeaddeaddeaddeaddeaddeaddead1111148015906120c1575073ffffffffffffffffffffffffffffffffffffffff861615155b61214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c325374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f727420455448206272696467696e672e00000000000060648201526084016101d8565b73ffffffffffffffffffffffffffffffffffffffff8716158015906121be57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b61224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c325374616e646172644272696467653a20427269646765455243323020646f60448201527f206e6f7420737570706f7274204d4e54206272696467696e672e00000000000060648201526084016101d8565b61225387611979565b156123a15761226287876119db565b612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101d8565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b50505050612435565b6123c373ffffffffffffffffffffffffffffffffffffffff8816863086611e7e565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360209081526040808320938a16835292905220546124019084906135fe565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600360209081526040808320938b16835292905220555b612443878787878786612a9b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b575e30060007f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b8a8c8b8b8b8a6040516024016124c596959493929190613616565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526125599392918890600401613479565b600060405180830381600087803b15801561066a57600080fd5b6060816000036125b657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156125e057806125ca81613671565b91506125d99050600a836136d8565b91506125ba565b60008167ffffffffffffffff8111156125fb576125fb6136ec565b6040519080825280601f01601f191660200182016040528015612625576020820181803683370190505b5090505b84156126a85761263a600183613511565b9150612647600a8661371b565b6126529060306135fe565b60f81b8183815181106126675761266761372f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126a1600a866136d8565b9450612629565b949350505050565b600080600080845160208601878a8af19695505050505050565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898686866040516127639392919061359e565b60405180910390a4610b5384848484612b29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f74bbfec0d26a17c2367408038090a9a4e1cd1671129dc8fdf57f146a499fe3d584846040516127d692919061375e565b60405180910390a350505050565b60006127ef83612b88565b801561280057506128008383612bec565b9392505050565b6000612869826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cbb9092919063ffffffff16565b8051909150156111aa578080602001905181019061288791906135dc565b6111aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101d8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161298b9392919061359e565b60405180910390a4505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead111173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051612a289392919061359e565b60405180910390a4610b5384848484612cca565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516127d692919061375e565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051612b139392919061359e565b60405180910390a461138c868686868686612d29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fef2dd684d0d947aa195ea84c18e3b5c457d3462c09eb29b20aac4f7d4d4f003584846040516127d692919061375e565b6000612bb4827f01ffc9a700000000000000000000000000000000000000000000000000000000612bec565b80156119d55750612be5827fffffffff00000000000000000000000000000000000000000000000000000000612bec565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612ca4575060208210155b8015612cb05750600081115b979650505050505050565b60606126a88484600085612da1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516127d692919061375e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161298b9392919061359e565b606082471015612e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101d8565b73ffffffffffffffffffffffffffffffffffffffff85163b612eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612eda9190613777565b60006040518083038185875af1925050503d8060008114612f17576040519150601f19603f3d011682016040523d82523d6000602084013e612f1c565b606091505b5091509150612cb082828660608315612f36575081612800565b825115612f465782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d8919061330e565b73ffffffffffffffffffffffffffffffffffffffff81168114612f9c57600080fd5b50565b60008083601f840112612fb157600080fd5b50813567ffffffffffffffff811115612fc957600080fd5b602083019150836020828501011115612fe157600080fd5b9250929050565b600080600080600080600060c0888a03121561300357600080fd5b873561300e81612f7a565b9650602088013561301e81612f7a565b9550604088013561302e81612f7a565b9450606088013561303e81612f7a565b93506080880135925060a088013567ffffffffffffffff81111561306157600080fd5b61306d8a828b01612f9f565b989b979a50959850939692959293505050565b803563ffffffff8116811461309457600080fd5b919050565b600080600080606085870312156130af57600080fd5b843593506130bf60208601613080565b9250604085013567ffffffffffffffff8111156130db57600080fd5b6130e787828801612f9f565b95989497509550505050565b60008060008060006080868803121561310b57600080fd5b853561311681612f7a565b9450602086013561312681612f7a565b935060408601359250606086013567ffffffffffffffff81111561314957600080fd5b61315588828901612f9f565b969995985093965092949392505050565b60008060008060006080868803121561317e57600080fd5b85359450602086013561319081612f7a565b935061319e60408701613080565b9250606086013567ffffffffffffffff81111561314957600080fd5b6000806000806000608086880312156131d257600080fd5b85356131dd81612f7a565b94506020860135935061319e60408701613080565b600080600080600080600060c0888a03121561320d57600080fd5b873561321881612f7a565b9650602088013561322881612f7a565b9550604088013561323881612f7a565b94506060880135935061324d60808901613080565b925060a088013567ffffffffffffffff81111561306157600080fd5b6000806000806060858703121561327f57600080fd5b843561328a81612f7a565b93506130bf60208601613080565b60005b838110156132b357818101518382015260200161329b565b83811115610b535750506000910152565b600081518084526132dc816020860160208601613298565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061280060208301846132c4565b60008060006040848603121561333657600080fd5b61333f84613080565b9250602084013567ffffffffffffffff81111561335b57600080fd5b61336786828701612f9f565b9497909650939450505050565b60008060008060008060a0878903121561338d57600080fd5b863561339881612f7a565b955060208701356133a881612f7a565b9450604087013593506133bd60608801613080565b9250608087013567ffffffffffffffff8111156133d957600080fd5b6133e589828a01612f9f565b979a9699509497509295939492505050565b6000806040838503121561340a57600080fd5b823561341581612f7a565b9150602083013561342581612f7a565b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261346f60808301846132c4565b9695505050505050565b84815273ffffffffffffffffffffffffffffffffffffffff841660208201526080604082015260006134ae60808301856132c4565b905063ffffffff8316606083015295945050505050565b6000602082840312156134d757600080fd5b815161280081612f7a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613523576135236134e2565b500390565b6000845161353a818460208901613298565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613576816001850160208a01613298565b60019201918201528351613591816002840160208801613298565b0160020195945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006135d360608301846132c4565b95945050505050565b6000602082840312156135ee57600080fd5b8151801515811461280057600080fd5b60008219821115613611576136116134e2565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261366560c08301846132c4565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a2576136a26134e2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136e7576136e76136a9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261372a5761372a6136a9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8281526040602082015260006126a860408301846132c4565b60008251613789818460208701613298565b919091019291505056fea164736f6c634300080f000a61010060405234801561001157600080fd5b5060405161243538038061243583398101604081905261003091610050565b6001608081905260a052600060c0526001600160a01b031660e052610080565b60006020828403121561006257600080fd5b81516001600160a01b038116811461007957600080fd5b9392505050565b60805160a05160c05160e0516123776100be6000396000818160d3015261026501526000610153015260006101280152600060fd01526123776000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c806354fd4d501462000057578063896f93d11462000079578063ce5ac90f14620000b6578063ee9a31a214620000cd575b600080fd5b62000061620000f5565b60405162000070919062000550565b60405180910390f35b620000906200008a3660046200064e565b620001a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000070565b62000090620000c73660046200064e565b620001b7565b620000907f000000000000000000000000000000000000000000000000000000000000000081565b6060620001227f000000000000000000000000000000000000000000000000000000000000000062000376565b6200014d7f000000000000000000000000000000000000000000000000000000000000000062000376565b620001787f000000000000000000000000000000000000000000000000000000000000000062000376565b6040516020016200018c93929190620006e5565b604051602081830303815290604052905090565b6000620001af848484620001b7565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff841662000261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e206164647265737300606482015260840160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008585856040516200029590620004c3565b620002a4949392919062000761565b604051809103906000f080158015620002c1573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80871691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a3949350505050565b606081600003620003ba57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115620003ea5780620003d181620007ea565b9150620003e29050600a8362000854565b9150620003be565b60008167ffffffffffffffff8111156200040857620004086200056c565b6040519080825280601f01601f19166020018201604052801562000433576020820181803683370190505b5090505b8415620001af576200044b6001836200086b565b91506200045a600a8662000885565b620004679060306200089c565b60f81b8183815181106200047f576200047f620008b7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350620004bb600a8662000854565b945062000437565b611a8480620008e783390190565b60005b83811015620004ee578181015183820152602001620004d4565b83811115620004fe576000848401525b50505050565b600081518084526200051e816020860160208601620004d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062000565602083018462000504565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620005ad57600080fd5b813567ffffffffffffffff80821115620005cb57620005cb6200056c565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156200061457620006146200056c565b816040528381528660208588010111156200062e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200066457600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146200068957600080fd5b9250602084013567ffffffffffffffff80821115620006a757600080fd5b620006b5878388016200059b565b93506040860135915080821115620006cc57600080fd5b50620006db868287016200059b565b9150509250925092565b60008451620006f9818460208901620004d1565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855162000737816001850160208a01620004d1565b6001920191820152835162000754816002840160208801620004d1565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526200079c608083018562000504565b8281036060840152620007b0818562000504565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200081e576200081e620007bb565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262000866576200086662000825565b500490565b600082821015620008805762000880620007bb565b500390565b60008262000897576200089762000825565b500690565b60008219821115620008b257620008b2620007bb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe6101206040523480156200001257600080fd5b5060405162001a8438038062001a8483398101604081905262000035916200016d565b6001600080848460036200004a83826200028c565b5060046200005982826200028c565b50505060809290925260a05260c05250506001600160a01b0390811660e052166101005262000358565b80516001600160a01b03811681146200009b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000c857600080fd5b81516001600160401b0380821115620000e557620000e5620000a0565b604051601f8301601f19908116603f01168101908282118183101715620001105762000110620000a0565b816040528381526020925086838588010111156200012d57600080fd5b600091505b8382101562000151578582018301518183018401529082019062000132565b83821115620001635760008385830101525b9695505050505050565b600080600080608085870312156200018457600080fd5b6200018f8562000083565b93506200019f6020860162000083565b60408601519093506001600160401b0380821115620001bd57600080fd5b620001cb88838901620000b6565b93506060870151915080821115620001e257600080fd5b50620001f187828801620000b6565b91505092959194509250565b600181811c908216806200021257607f821691505b6020821081036200023357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028757600081815260208120601f850160051c81016020861015620002625750805b601f850160051c820191505b8181101562000283578281556001016200026e565b5050505b505050565b81516001600160401b03811115620002a857620002a8620000a0565b620002c081620002b98454620001fd565b8462000239565b602080601f831160018114620002f85760008415620002df5750858301515b600019600386901b1c1916600185901b17855562000283565b600085815260208120601f198616915b82811015620003295788860151825594840194600190910190840162000308565b5085821015620003485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516116cb620003b9600039600081816102f50152818161038a015281816105cf01526107a90152600081816101a9015261031b015260006107380152600061070f015260006106e601526116cb6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e1461033f578063e78cea92146102f3578063ee9a31a21461038557600080fd5b8063ae1f6aaf146102f3578063c01e1bd614610319578063d6c0b2c41461031957600080fd5b80639dc29fac116100bd5780639dc29fac146102ba578063a457c2d7146102cd578063a9059cbb146102e057600080fd5b806370a082311461027c57806395d89b41146102b257600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611307565b6103ac565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861049d565b60405161019b919061137c565b61018f6102133660046113f6565b61052f565b6002545b60405190815260200161019b565b61018f610238366004611420565b610547565b6040516012815260200161019b565b61018f61025a3660046113f6565b61056b565b61027261026d3660046113f6565b6105b7565b005b6101f86106df565b61021c61028a36600461145c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610782565b6102726102c83660046113f6565b610791565b61018f6102db3660046113f6565b6108a8565b61018f6102ee3660046113f6565b610979565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61034d366004611477565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061046557507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061049457507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ac906114aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104d8906114aa565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b60003361053d818585610987565b5060019392505050565b600033610555858285610b3b565b610560858585610c12565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061053d90829086906105b290879061152c565b610987565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b61068b8282610ec5565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106d391815260200190565b60405180910390a25050565b606061070a7f0000000000000000000000000000000000000000000000000000000000000000610fe5565b6107337f0000000000000000000000000000000000000000000000000000000000000000610fe5565b61075c7f0000000000000000000000000000000000000000000000000000000000000000610fe5565b60405160200161076e93929190611544565b604051602081830303815290604052905090565b6060600480546104ac906114aa565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e0000000000000000000000006064820152608401610678565b6108608282611122565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106d391815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610678565b6105608286868403610987565b60003361053d818585610c12565b73ffffffffffffffffffffffffffffffffffffffff8316610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff8216610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c0c5781811015610bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610678565b610c0c8484848403610987565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff8216610d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e5290849061152c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb891815260200190565b60405180910390a3610c0c565b73ffffffffffffffffffffffffffffffffffffffff8216610f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610678565b8060026000828254610f54919061152c565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f8e90849061152c565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361102857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611052578061103c816115ba565b915061104b9050600a83611621565b915061102c565b60008167ffffffffffffffff81111561106d5761106d611635565b6040519080825280601f01601f191660200182016040528015611097576020820181803683370190505b5090505b841561111a576110ac600183611664565b91506110b9600a8661167b565b6110c490603061152c565b60f81b8183815181106110d9576110d961168f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611113600a86611621565b945061109b565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610678565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112b7908490611664565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b2e565b60006020828403121561131957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461134957600080fd5b9392505050565b60005b8381101561136b578181015183820152602001611353565b83811115610c0c5750506000910152565b602081526000825180602084015261139b816040850160208701611350565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113f157600080fd5b919050565b6000806040838503121561140957600080fd5b611412836113cd565b946020939093013593505050565b60008060006060848603121561143557600080fd5b61143e846113cd565b925061144c602085016113cd565b9150604084013590509250925092565b60006020828403121561146e57600080fd5b611349826113cd565b6000806040838503121561148a57600080fd5b611493836113cd565b91506114a1602084016113cd565b90509250929050565b600181811c908216806114be57607f821691505b6020821081036114f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561153f5761153f6114fd565b500190565b60008451611556818460208901611350565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611592816001850160208a01611350565b600192019182015283516115ad816002840160208801611350565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115eb576115eb6114fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611630576116306115f2565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015611676576116766114fd565b500390565b60008261168a5761168a6115f2565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a6101206040523480156200001257600080fd5b506040516200112b3803806200112b8339810160408190526200003591620000de565b734200000000000000000000000000000000000010816040518060400160405280600c81526020016b26b0b73a3632902a37b5b2b760a11b8152506040518060400160405280600381526020016213539560ea1b815250600160008084848160039081620000a49190620001b5565b506004620000b38282620001b5565b50505060809290925260a05260c05250506001600160a01b0390811660e05216610100525062000281565b600060208284031215620000f157600080fd5b81516001600160a01b03811681146200010957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013b57607f821691505b6020821081036200015c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001b057600081815260208120601f850160051c810160208610156200018b5750805b601f850160051c820191505b81811015620001ac5782815560010162000197565b5050505b505050565b81516001600160401b03811115620001d157620001d162000110565b620001e981620001e2845462000126565b8462000162565b602080601f831160018114620002215760008415620002085750858301515b600019600386901b1c1916600185901b178555620001ac565b600085815260208120601f198616915b82811015620002525788860151825594840194600190910190840162000231565b5085821015620002715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610e57620002d4600039600081816102e7015261037c0152600081816101a9015261030d0152600061078201526000610759015260006107300152610e576000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610331578063e78cea92146102e5578063ee9a31a21461037757600080fd5b8063ae1f6aaf146102e5578063c01e1bd61461030b578063d6c0b2c41461030b57600080fd5b80639dc29fac116100bd5780639dc29fac146102ac578063a457c2d7146102bf578063a9059cbb146102d257600080fd5b806370a082311461027c57806395d89b41146102a457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004610a8f565b61039e565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861048f565b60405161019b9190610b08565b61018f610213366004610b82565b610521565b6002545b60405190815260200161019b565b61018f610238366004610bac565b6105b1565b6040516012815260200161019b565b61018f61025a366004610b82565b61063c565b61027261026d366004610b82565b6106c7565b005b6101f8610729565b61021c61028a366004610be8565b73ffffffffffffffffffffffffffffffffffffffff163190565b6101f86107cc565b6102726102ba366004610b82565b6107db565b61018f6102cd366004610b82565b61083d565b61018f6102e0366004610b82565b6108c8565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61033f366004610c03565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061045757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061048657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461049e90610c36565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90610c36565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c656761637945524332304d4e543a20617070726f766520697320646973616260448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526000906084015b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c656761637945524332304d4e543a207472616e7366657246726f6d2069732060448201527f64697361626c656400000000000000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304d4e543a20696e637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304d4e543a206d696e742069732064697361626c656460448201526064016105a8565b60606107547f0000000000000000000000000000000000000000000000000000000000000000610952565b61077d7f0000000000000000000000000000000000000000000000000000000000000000610952565b6107a67f0000000000000000000000000000000000000000000000000000000000000000610952565b6040516020016107b893929190610c89565b604051602081830303815290604052905090565b60606004805461049e90610c36565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304d4e543a206275726e2069732064697361626c656460448201526064016105a8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304d4e543a206465637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105a8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c656761637945524332304d4e543a207472616e73666572206973206469736160448201527f626c65640000000000000000000000000000000000000000000000000000000060648201526000906084016105a8565b60608160000361099557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156109bf57806109a981610d2e565b91506109b89050600a83610d95565b9150610999565b60008167ffffffffffffffff8111156109da576109da610da9565b6040519080825280601f01601f191660200182016040528015610a04576020820181803683370190505b5090505b8415610a8757610a19600183610dd8565b9150610a26600a86610def565b610a31906030610e03565b60f81b818381518110610a4657610a46610e1b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610a80600a86610d95565b9450610a08565b949350505050565b600060208284031215610aa157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ad157600080fd5b9392505050565b60005b83811015610af3578181015183820152602001610adb565b83811115610b02576000848401525b50505050565b6020815260008251806020840152610b27816040850160208701610ad8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7d57600080fd5b919050565b60008060408385031215610b9557600080fd5b610b9e83610b59565b946020939093013593505050565b600080600060608486031215610bc157600080fd5b610bca84610b59565b9250610bd860208501610b59565b9150604084013590509250925092565b600060208284031215610bfa57600080fd5b610ad182610b59565b60008060408385031215610c1657600080fd5b610c1f83610b59565b9150610c2d60208401610b59565b90509250929050565b600181811c90821680610c4a57607f821691505b602082108103610c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008451610c9b818460208901610ad8565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610cd7816001850160208a01610ad8565b60019201918201528351610cf2816002840160208801610ad8565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d5f57610d5f610cff565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610da457610da4610d66565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610dea57610dea610cff565b500390565b600082610dfe57610dfe610d66565b500690565b60008219821115610e1657610e16610cff565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a60806040523480156200001157600080fd5b5060405162000e3c38038062000e3c833981016040819052620000349162000127565b600362000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610b4080620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e3919061094a565b60405180910390f35b6100ff6100fa3660046109e6565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f366004610a10565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109e6565b6102ce565b610113610164366004610a4c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109e6565b610329565b6100ff6101b53660046109e6565b6103ff565b6101136101c8366004610a6e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610aa1565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610af4565b61040d565b60606004805461020f90610aa1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108d7908490610af4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161093d91815260200190565b60405180910390a3610691565b600060208083528351808285015260005b818110156109775785810183015185820160400152820161095b565b81811115610989576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109e157600080fd5b919050565b600080604083850312156109f957600080fd5b610a02836109bd565b946020939093013593505050565b600080600060608486031215610a2557600080fd5b610a2e846109bd565b9250610a3c602085016109bd565b9150604084013590509250925092565b600060208284031215610a5e57600080fd5b610a67826109bd565b9392505050565b60008060408385031215610a8157600080fd5b610a8a836109bd565b9150610a98602084016109bd565b90509250929050565b600181811c90821680610ab557607f821691505b602082108103610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a60806040523480156200001157600080fd5b506040516200156038038062001560833981016040819052620000349162000179565b8181600362000044838262000298565b50600462000053828262000298565b5050600580546001600160a01b039586166001600160a01b03199182161790915560068054969095169516949094179092555062000364915050565b80516001600160a01b0381168114620000a757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d457600080fd5b81516001600160401b0380821115620000f157620000f1620000ac565b604051601f8301601f19908116603f011681019082821181831017156200011c576200011c620000ac565b816040528381526020925086838588010111156200013957600080fd5b600091505b838210156200015d57858201830151818301840152908201906200013e565b838211156200016f5760008385830101525b9695505050505050565b600080600080608085870312156200019057600080fd5b6200019b856200008f565b9350620001ab602086016200008f565b60408601519093506001600160401b0380821115620001c957600080fd5b620001d788838901620000c2565b93506060870151915080821115620001ee57600080fd5b50620001fd87828801620000c2565b91505092959194509250565b600181811c908216806200021e57607f821691505b6020821081036200023f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029357600081815260208120601f850160051c810160208610156200026e5750805b601f850160051c820191505b818110156200028f578281556001016200027a565b5050505b505050565b81516001600160401b03811115620002b457620002b4620000ac565b620002cc81620002c5845462000209565b8462000245565b602080601f831160018114620003045760008415620002eb5750858301515b600019600386901b1c1916600185901b1785556200028f565b600085815260208120601f198616915b82811015620003355788860151825594840194600190910190840162000314565b5085821015620003545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6111ec80620003746000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610215578063ae1f6aaf14610228578063c01e1bd61461026d578063dd62ed3e1461028d57600080fd5b806370a08231146101b157806395d89b41146101e75780639dc29fac146101ef578063a457c2d71461020257600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610f95565b6102d3565b60405190151581526020015b60405180910390f35b610135610393565b6040516101249190610fde565b61011861015036600461107a565b610425565b6002545b604051908152602001610124565b6101186101753660046110a4565b61043d565b60405160128152602001610124565b61011861019736600461107a565b610461565b6101af6101aa36600461107a565b6104ad565b005b6101596101bf3660046110e0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610135610591565b6101af6101fd36600461107a565b6105a0565b61011861021036600461107a565b610673565b61011861022336600461107a565b610744565b6006546102489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b6005546102489073ffffffffffffffffffffffffffffffffffffffff1681565b61015961029b3660046110fb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a700000000000000000000000000000000000000000000000000000000148061038b57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103a29061112e565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce9061112e565b801561041b5780601f106103f05761010080835404028352916020019161041b565b820191906000526020600020905b8154815290600101906020018083116103fe57829003601f168201915b5050505050905090565b600033610433818585610752565b5060019392505050565b60003361044b858285610906565b6104568585856109dd565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061043390829086906104a89087906111b0565b610752565b60065473ffffffffffffffffffffffffffffffffffffffff163314610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064015b60405180910390fd5b61053d8282610c90565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161058591815260200190565b60405180910390a25050565b6060600480546103a29061112e565b60065473ffffffffffffffffffffffffffffffffffffffff163314610621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161052a565b61062b8282610db0565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161058591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6104568286868403610752565b6000336104338185856109dd565b73ffffffffffffffffffffffffffffffffffffffff83166107f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109d757818110156109ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161052a565b6109d78484848403610752565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c1d9084906111b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8391815260200190565b60405180910390a36109d7565b73ffffffffffffffffffffffffffffffffffffffff8216610d0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610d1f91906111b0565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d599084906111b0565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610f459084906111c8565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016108f9565b600060208284031215610fa757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fd757600080fd5b9392505050565b600060208083528351808285015260005b8181101561100b57858101830151858201604001528201610fef565b8181111561101d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461107557600080fd5b919050565b6000806040838503121561108d57600080fd5b61109683611051565b946020939093013593505050565b6000806000606084860312156110b957600080fd5b6110c284611051565b92506110d060208501611051565b9150604084013590509250925092565b6000602082840312156110f257600080fd5b610fd782611051565b6000806040838503121561110e57600080fd5b61111783611051565b915061112560208401611051565b90509250929050565b600181811c9082168061114257607f821691505b60208210810361117b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156111c3576111c3611181565b500190565b6000828210156111da576111da611181565b50039056fea164736f6c634300080f000a608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105ef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a6101406040523480156200001257600080fd5b50604051620029cf380380620029cf83398101604081905262000035916200027a565b734200000000000000000000000000000000000007608052600160a052600460c052600060e0526001600160a01b03828116610100528116610120526200007b62000083565b5050620002b9565b600054600160a81b900460ff1615808015620000ac57506000546001600160a01b90910460ff16105b80620000e35750620000c930620001d060201b620015de1760201c565b158015620000e35750600054600160a01b900460ff166001145b6200014c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200017a576000805460ff60a81b1916600160a81b1790555b62000184620001df565b8015620001cd576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200024e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000143565b60cc80546001600160a01b03191661dead179055565b6001600160a01b0381168114620001cd57600080fd5b600080604083850312156200028e57600080fd5b82516200029b8162000264565b6020840151909250620002ae8162000264565b809150509250929050565b60805160a05160c05160e05161010051610120516126806200034f60003960008181610359015281816108720152818161090901526113210152600081816101be015281816108d7015281816118e8015281816119c001528181611a210152611aed015260006104af015260006104860152600061045d0152600081816102e501528181610a0f01526119ea01526126806000f3fe60806040526004361061015f5760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e300146103cb578063ecc70428146103de578063ff8daf151461044357600080fd5b8063b1b1b2091461037b578063b28ade25146103ab57600080fd5b80639fce812c116100a55780639fce812c146102d3578063a4e7f8bd14610307578063ac6986c51461034757600080fd5b806383a74074146102bc5780638cbeeef21461024257600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf1461027a5780636e296e45146102905780638129fc1c146102a557600080fd5b80634c1d6a691461024257806354fd4d501461025857600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633f827a5a1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b34801561022657600080fd5b5061022f600181565b60405161ffff909116815260200161018e565b34801561024e57600080fd5b50610179619c4081565b34801561026457600080fd5b5061026d610456565b60405161018e9190611f9d565b34801561028657600080fd5b5061017961138881565b34801561029c57600080fd5b506101e06104f9565b3480156102b157600080fd5b506102ba6105e5565b005b3480156102c857600080fd5b5061017962030d4081565b3480156102df57600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561031357600080fd5b50610337610322366004611fb0565b60ce6020526000908152604090205460ff1681565b604051901515815260200161018e565b34801561035357600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561038757600080fd5b50610337610396366004611fb0565b60cb6020526000908152604090205460ff1681565b3480156103b757600080fd5b506101796103c636600461202b565b6107e2565b6102ba6103d93660046120a1565b610852565b3480156103ea57600080fd5b5061043560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b60405190815260200161018e565b6102ba610451366004612112565b610c7a565b60606104817f00000000000000000000000000000000000000000000000000000000000000006115fa565b6104aa7f00000000000000000000000000000000000000000000000000000000000000006115fa565b6104d37f00000000000000000000000000000000000000000000000000000000000000006115fa565b6040516020016104e5939291906121a1565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016105c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff1615808015610630575060005460017401000000000000000000000000000000000000000090910460ff16105b806106625750303b158015610662575060005474010000000000000000000000000000000000000000900460ff166001145b6106ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105bf565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561077457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61077c611737565b80156107df57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107fe604063ffffffff8816612246565b61080891906122a5565b610813601088612246565b6108209062030d406122cc565b61082a91906122cc565b61083491906122cc565b61083e91906122cc565b61084891906122cc565b90505b9392505050565b8415610a095761089a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333088611810565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790526000917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906122f8565b905080610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f74686520617070726f766520666f72204c31206d6e7420746f204f7074696d6960448201527f736d506f7274616c206661696c6564000000000000000000000000000000000060648201526084016105bf565b505b610b44857f0000000000000000000000000000000000000000000000000000000000000000610a398686866107e2565b7fff8daf1500000000000000000000000000000000000000000000000000000000610aa460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a8c348a8d8d604051602401610ac2989796959493929190612363565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526118ab565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338585610bc960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610bdb9594939291906123c9565b60405180910390a26040805186815234602082015233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b905090565b60f088901c60028110610d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105bf565b8061ffff16600003610e37576000610d93888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d611962565b600081815260cb602052604090205490915060ff1615610e35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105bf565b505b6000610e7e8a8a8a8a8a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198192505050565b9050610e886119a6565b15610ec057853414610e9c57610e9c612417565b600081815260ce602052604090205460ff1615610ebb57610ebb612417565b611012565b3415610f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105bf565b600081815260ce602052604090205460ff16611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105bf565b61101b88611aca565b156110ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105bf565b600081815260cb602052604090205460ff161561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105bf565b61118e8561117f611388619c406122cc565b67ffffffffffffffff16611b41565b15806111b4575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156112cd57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105bf565b50506115d4565b60018715611391576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a90527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af115801561136a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138e91906122f8565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006114228a619c405a6113e59190612446565b8a89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5f92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080801561145a5750815b156114c257600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115cf565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105bf565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60608160000361163d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561166757806116518161245d565b91506116609050600a83612495565b9150611641565b60008167ffffffffffffffff811115611682576116826124a9565b6040519080825280601f01601f1916602001820160405280156116ac576020820181803683370190505b5090505b841561172f576116c1600183612446565b91506116ce600a866124d8565b6116d99060306124ec565b60f81b8183815181106116ee576116ee612504565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611728600a86612495565b94506116b0565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff166117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bf565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526118a5908590611b79565b50505050565b6040517f85945feb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385945feb90349061192a9088908890829089906000908a90600401612533565b6000604051808303818588803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505050505050565b600061197085858585611c8a565b805190602001209050949350505050565b600061199288888888888888611d23565b805190602001209050979650505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610c7557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190612592565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611b3b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000611bdb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611dc59092919063ffffffff16565b805190915015611c855780806020019051810190611bf991906122f8565b611c85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105bf565b505050565b606084848484604051602401611ca394939291906125af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611d4297969594939291906125f9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b606061084884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105bf565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611e779190612657565b60006040518083038185875af1925050503d8060008114611eb4576040519150601f19603f3d011682016040523d82523d6000602084013e611eb9565b606091505b5091509150611ec9828286611ed4565b979650505050505050565b60608315611ee357508161084b565b825115611ef35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bf9190611f9d565b60005b83811015611f42578181015183820152602001611f2a565b838111156118a55750506000910152565b60008151808452611f6b816020860160208601611f27565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061084b6020830184611f53565b600060208284031215611fc257600080fd5b5035919050565b60008083601f840112611fdb57600080fd5b50813567ffffffffffffffff811115611ff357600080fd5b60208301915083602082850101111561200b57600080fd5b9250929050565b803563ffffffff8116811461202657600080fd5b919050565b60008060006040848603121561204057600080fd5b833567ffffffffffffffff81111561205757600080fd5b61206386828701611fc9565b9094509250612076905060208501612012565b90509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146107df57600080fd5b6000806000806000608086880312156120b957600080fd5b8535945060208601356120cb8161207f565b9350604086013567ffffffffffffffff8111156120e757600080fd5b6120f388828901611fc9565b9094509250612106905060608701612012565b90509295509295909350565b60008060008060008060008060e0898b03121561212e57600080fd5b8835975060208901356121408161207f565b965060408901356121508161207f565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561218157600080fd5b61218d8b828c01611fc9565b999c989b5096995094979396929594505050565b600084516121b3818460208901611f27565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516121ef816001850160208a01611f27565b6001920191820152835161220a816002840160208801611f27565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561226d5761226d612217565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806122c0576122c0612276565b92169190910492915050565b600067ffffffffffffffff8083168185168083038211156122ef576122ef612217565b01949350505050565b60006020828403121561230a57600080fd5b8151801515811461084b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c08301526123bb60e08301848661231a565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006123f960808301868861231a565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561245857612458612217565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361248e5761248e612217565b5060010190565b6000826124a4576124a4612276565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826124e7576124e7612276565b500690565b600082198211156124ff576124ff612217565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b86815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015267ffffffffffffffff84166060820152821515608082015260c060a0820152600061258660c0830184611f53565b98975050505050505050565b6000602082840312156125a457600080fd5b815161084b8161207f565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526125e86080830185611f53565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261264a60e0830184611f53565b9998505050505050505050565b60008251612669818460208701611f27565b919091019291505056fea164736f6c634300080f000a608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a6101006040523480156200001257600080fd5b506040516200260938038062002609833981016040819052620000359162000243565b6001600160a01b038116608052600160a052600460c052600060e0526200005b62000062565b5062000275565b600054600160a81b900460ff16158080156200008b57506000546001600160a01b90910460ff16105b80620000c25750620000a830620001af60201b620014411760201c565b158015620000c25750600054600160a01b900460ff166001145b6200012b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b179055801562000159576000805460ff60a81b1916600160a81b1790555b62000163620001be565b8015620001ac576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200022d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000122565b60cc80546001600160a01b03191661dead179055565b6000602082840312156200025657600080fd5b81516001600160a01b03811681146200026e57600080fd5b9392505050565b60805160a05160c05160e051612345620002c4600039600061045f015260006104360152600061040d015260008181610296015281816103070152818161082e0152610cd701526123456000f3fe6080604052600436106101445760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e3001461037b578063ecc704281461038e578063ff8daf15146103f357600080fd5b8063b1b1b2091461032b578063b28ade251461035b57600080fd5b80639fce812c116100a55780639fce812c14610284578063a4e7f8bd146102b8578063a7119869146102f857600080fd5b806383a740741461026d5780638cbeeef2146101ce57600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf146102065780636e296e451461021c5780638129fc1c1461025657600080fd5b80634c1d6a69146101ce57806354fd4d50146101e457600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633f827a5a146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b3480156101b257600080fd5b506101bb600181565b60405161ffff9091168152602001610173565b3480156101da57600080fd5b5061015e619c4081565b3480156101f057600080fd5b506101f9610406565b6040516101739190611c93565b34801561021257600080fd5b5061015e61138881565b34801561022857600080fd5b506102316104a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561026257600080fd5b5061026b610595565b005b34801561027957600080fd5b5061015e62030d4081565b34801561029057600080fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c457600080fd5b506102e86102d3366004611ca6565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561030457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610231565b34801561033757600080fd5b506102e8610346366004611ca6565b60cb6020526000908152604090205460ff1681565b34801561036757600080fd5b5061015e610376366004611d21565b610792565b61026b610389366004611d99565b610802565b34801561039a57600080fd5b506103e560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61026b610401366004611e08565b610a95565b60606104317f000000000000000000000000000000000000000000000000000000000000000061145d565b61045a7f000000000000000000000000000000000000000000000000000000000000000061145d565b6104837f000000000000000000000000000000000000000000000000000000000000000061145d565b60405160200161049593929190611e93565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff16158080156105e0575060005460017401000000000000000000000000000000000000000090910460ff16105b806106125750303b158015610612575060005474010000000000000000000000000000000000000000900460ff166001145b61069e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161056f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561072457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61072c61159a565b801561078f57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107ae604063ffffffff8816611f38565b6107b89190611f97565b6107c3601088611f38565b6107d09062030d40611fbe565b6107da9190611fbe565b6107e49190611fbe565b6107ee9190611fbe565b6107f89190611fbe565b90505b9392505050565b84156108285761082873deaddeaddeaddeaddeaddeaddeaddeaddead1111333088611673565b610963857f0000000000000000000000000000000000000000000000000000000000000000610858868686610792565b7fff8daf15000000000000000000000000000000000000000000000000000000006108c360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a348d8a8d8d6040516024016108e1989796959493929190612033565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261170e565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856109e860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516109fa959493929190612099565b60405180910390a2604080513481526020810187905233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b60f088901c60028110610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161056f565b8061ffff16600003610c52576000610bae888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d61179e565b600081815260cb602052604090205490915060ff1615610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161056f565b505b6000610c998a8a8a8a8a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117bd92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610d3157863414610d0d57610d0d6120e7565b600081815260ce602052604090205460ff1615610d2c57610d2c6120e7565b610e83565b3415610de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161056f565b600081815260ce602052604090205460ff16610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161056f565b610e8c886117e2565b15610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161056f565b600081815260cb602052604090205460ff1615610fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161056f565b610fff85610ff0611388619c40611fbe565b67ffffffffffffffff16611837565b1580611025575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561113e57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b5050611437565b600186156111f4576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810188905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612116565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006112858a619c405a6112489190612138565b8b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061185592505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508080156112bd5750815b1561132557600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611432565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036114a057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114ca57806114b48161214f565b91506114c39050600a83612187565b91506114a4565b60008167ffffffffffffffff8111156114e5576114e561219b565b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b5090505b841561159257611524600183612138565b9150611531600a866121ca565b61153c9060306121de565b60f81b818381518110611551576115516121f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061158b600a86612187565b9450611513565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161056f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261170890859061186f565b50505050565b6040517f39fd0090000000000000000000000000000000000000000000000000000000008152734200000000000000000000000000000000000016906339fd0090903490611766908890889088908890600401612225565b6000604051808303818588803b15801561177f57600080fd5b505af1158015611793573d6000803e3d6000fd5b505050505050505050565b60006117ac85858585611980565b805190602001209050949350505050565b60006117ce88888888888888611a19565b805190602001209050979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611831575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60006118d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b80519091501561197b57808060200190518101906118ef9190612116565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056f565b505050565b6060848484846040516024016119999493929190612274565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611a3897969594939291906122be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b60606107f884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b6d919061231c565b60006040518083038185875af1925050503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bbf828286611bca565b979650505050505050565b60608315611bd95750816107fb565b825115611be95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9190611c93565b60005b83811015611c38578181015183820152602001611c20565b838111156117085750506000910152565b60008151808452611c61816020860160208601611c1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107fb6020830184611c49565b600060208284031215611cb857600080fd5b5035919050565b60008083601f840112611cd157600080fd5b50813567ffffffffffffffff811115611ce957600080fd5b602083019150836020828501011115611d0157600080fd5b9250929050565b803563ffffffff81168114611d1c57600080fd5b919050565b600080600060408486031215611d3657600080fd5b833567ffffffffffffffff811115611d4d57600080fd5b611d5986828701611cbf565b9094509250611d6c905060208501611d08565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff81168114611d1c57600080fd5b600080600080600060808688031215611db157600080fd5b85359450611dc160208701611d75565b9350604086013567ffffffffffffffff811115611ddd57600080fd5b611de988828901611cbf565b9094509250611dfc905060608701611d08565b90509295509295909350565b60008060008060008060008060e0898b031215611e2457600080fd5b88359750611e3460208a01611d75565b9650611e4260408a01611d75565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611e7357600080fd5b611e7f8b828c01611cbf565b999c989b5096995094979396929594505050565b60008451611ea5818460208901611c1d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611ee1816001850160208a01611c1d565b60019201918201528351611efc816002840160208801611c1d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f5f57611f5f611f09565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611fb257611fb2611f68565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fe157611fe1611f09565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c083015261208b60e083018486611fea565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c9608083018688611fea565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121561212857600080fd5b815180151581146107fb57600080fd5b60008282101561214a5761214a611f09565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361218057612180611f09565b5060010190565b60008261219657612196611f68565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826121d9576121d9611f68565b500690565b600082198211156121f1576121f1611f09565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316604082015260806060820152600061226a6080830184611c49565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526122ad6080830185611c49565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261230f60e0830184611c49565b9998505050505050505050565b6000825161232e818460208701611c1d565b919091019291505056fea164736f6c634300080f000a60e06040523480156200001157600080fd5b50604051620022d2380380620022d2833981016040819052620000349162000859565b6001608052600360a052600060c052620000548787878787878762000061565b5050505050505062000a59565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000adf1760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006bb565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022b283398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006e8565b565b620002f16200074f565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007ab565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6001816040015160ff1611620004665760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000112565b606854608082015182516001600160401b0390921691620004889190620009a8565b63ffffffff161115620004de5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff16116200054f5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000571908290620009d3565b6200057d919062000a05565b63ffffffff1614620005f85760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006e39063ffffffff6a010000000000000000000082048116911662000a34565b905090565b600054610100900460ff16620007445760405162461bcd60e51b815260206004820152602b6024820152600080516020620022b283398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007ab565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200081557600080fd5b919050565b805163ffffffff811681146200081557600080fd5b805160ff811681146200081557600080fd5b80516001600160801b03811681146200081557600080fd5b60008060008060008060008789036101808112156200087757600080fd5b6200088289620007fd565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008b757600080fd5b819550620008c860a08c01620007fd565b945060c060bf1984011215620008dd57600080fd5b604051925060c08301915082821081831117156200090b57634e487b7160e01b600052604160045260246000fd5b506040526200091d60c08a016200081a565b81526200092d60e08a016200082f565b6020820152620009416101008a016200082f565b6040820152620009556101208a016200081a565b6060820152620009696101408a016200081a565b60808201526200097d6101608a0162000841565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009ca57620009ca62000992565b01949350505050565b600063ffffffff80841680620009f957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a2b5762000a2b62000992565b02949350505050565b60006001600160401b03828116848216808303821115620009ca57620009ca62000992565b60805160a05160c05161182962000a89600039600061056e015260006105450152600061051c01526118296000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b7146103f7578063f975e9251461040b578063ffa1ad741461041e57600080fd5b8063f2fde38b146103db578063f45e65d8146103ee57600080fd5b8063c9b26f61116100b2578063c9b26f611461028b578063cc731b021461029e578063e81b2c6d146103d257600080fd5b8063b40a817c14610265578063c71973f61461027857600080fd5b80634f16540b11610124578063715018a611610109578063715018a61461022c5780638da5cb5b14610234578063935f029e1461025257600080fd5b80634f16540b146101f057806354fd4d501461021757600080fd5b80630c18c1621461015657806318d13918146101725780631fd19ee1146101875780634add321d146101cf575b600080fd5b61015f60655481565b6040519081526020015b60405180910390f35b610185610180366004611307565b610426565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610169565b6101d76104ea565b60405167ffffffffffffffff9091168152602001610169565b61015f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61021f610515565b60405161016991906113a3565b6101856105b8565b60335473ffffffffffffffffffffffffffffffffffffffff166101aa565b6101856102603660046113b6565b6105cc565b6101856102733660046113f0565b610665565b610185610286366004611548565b610750565b610185610299366004611564565b610764565b6103626040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101699190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61015f60675481565b6101856103e9366004611307565b610794565b61015f60665481565b6068546101d79067ffffffffffffffff1681565b61018561041936600461157d565b610848565b61015f600081565b61042e610afb565b610456817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516104de91906113a3565b60405180910390a35050565b6069546000906105109063ffffffff6a010000000000000000000082048116911661161f565b905090565b60606105407f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6105697f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6105927f0000000000000000000000000000000000000000000000000000000000000000610b7c565b6040516020016105a49392919061164b565b604051602081830303815290604052905090565b6105c0610afb565b6105ca6000610cb9565b565b6105d4610afb565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161065891906113a3565b60405180910390a3505050565b61066d610afb565b6106756104ea565b67ffffffffffffffff168167ffffffffffffffff1610156106f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ad565b610758610afb565b61076181610d30565b50565b61076c610afb565b60678190556040805160208082018490528251808303909101815290820190915260006104ad565b61079c610afb565b73ffffffffffffffffffffffffffffffffffffffff811661083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106ee565b61076181610cb9565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ee565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561096c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109746111a4565b61097d88610794565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c088390556109ed82610d30565b6109f56104ea565b67ffffffffffffffff168467ffffffffffffffff161015610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016106ee565b8015610ad557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ee565b606081600003610bbf57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610be95780610bd3816116c1565b9150610be29050600a83611728565b9150610bc3565b60008167ffffffffffffffff811115610c0457610c0461140b565b6040519080825280601f01601f191660200182016040528015610c2e576020820181803683370190505b5090505b8415610cb157610c4360018361173c565b9150610c50600a86611753565b610c5b906030611767565b60f81b818381518110610c7057610c7061177f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610caa600a86611728565b9450610c32565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016106ee565b6001816040015160ff1611610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016106ee565b6068546080820151825167ffffffffffffffff90921691610e9891906117ae565b63ffffffff161115610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016106ee565b6000816020015160ff1611610f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016106ee565b8051602082015163ffffffff82169160ff90911690610fbd9082906117cd565b610fc791906117f0565b63ffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016106ee565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ee565b6105ca600054610100900460ff166112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ee565b6105ca33610cb9565b803573ffffffffffffffffffffffffffffffffffffffff8116811461130257600080fd5b919050565b60006020828403121561131957600080fd5b611322826112de565b9392505050565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b60008151808452611371816020860160208601611329565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113226020830184611359565b600080604083850312156113c957600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461130257600080fd5b60006020828403121561140257600080fd5b611322826113d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461130257600080fd5b803560ff8116811461130257600080fd5b80356fffffffffffffffffffffffffffffffff8116811461130257600080fd5b600060c0828403121561149157600080fd5b60405160c0810181811067ffffffffffffffff821117156114db577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806114ea8361143a565b81526114f86020840161144e565b60208201526115096040840161144e565b604082015261151a6060840161143a565b606082015261152b6080840161143a565b608082015261153c60a0840161145f565b60a08201525092915050565b600060c0828403121561155a57600080fd5b611322838361147f565b60006020828403121561157657600080fd5b5035919050565b6000806000806000806000610180888a03121561159957600080fd5b6115a2886112de565b96506020880135955060408801359450606088013593506115c5608089016113d8565b92506115d360a089016112de565b91506115e28960c08a0161147f565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611642576116426115f0565b01949350505050565b6000845161165d818460208901611329565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611699816001850160208a01611329565b600192019182015283516116b4816002840160208801611329565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116f2576116f26115f0565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611737576117376116f9565b500490565b60008282101561174e5761174e6115f0565b500390565b600082611762576117626116f9565b500690565b6000821982111561177a5761177a6115f0565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611642576116426115f0565b600063ffffffff808416806117e4576117e46116f9565b92169190910492915050565b600063ffffffff80831681851681830481118215151615611813576118136115f0565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696101606040523480156200001257600080fd5b506040516200608c3803806200608c83398101604081905262000035916200029e565b6001608052600660a052600060c0526001600160a01b0380861660e052848116610120528281166101005281166101405262000071836200007c565b505050505062000322565b600054610100900460ff16158080156200009d5750600054600160ff909116105b80620000cd5750620000ba30620001d360201b62001ddc1760201c565b158015620000cd575060005460ff166001145b620001365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200015a576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000188620001e2565b8015620001cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff166200024f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200012d565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200029b57600080fd5b50565b600080600080600060a08688031215620002b757600080fd5b8551620002c48162000285565b6020870151909550620002d78162000285565b60408701519094508015158114620002ee57600080fd5b6060870151909350620003018162000285565b6080870151909250620003148162000285565b809150509295509295909350565b60805160a05160c05160e051610100516101205161014051615cc2620003ca600039600081816103790152818161072e015261100d015260008181610287015281816111cb015261146801526000818161051a01526126d101526000818161018801528181610a3001528181610ca2015281816113c4015281816118d401528181611ab5015261220c0152600061132f01526000611306015260006112dd0152615cc26000f3fe6080604052600436106101475760003560e01c80638b4c40b0116100c0578063cff0ab9611610074578063d69b2b1b11610059578063d69b2b1b1461045c578063e965084c1461047c578063f04987501461050857600080fd5b8063cff0ab961461039b578063d53a822f1461043c57600080fd5b8063a14238e7116100a5578063a14238e7146102fe578063a35d99df1461032e578063ac6986c51461036757600080fd5b80638b4c40b01461016f5780639bf62d82146102d157600080fd5b80635c975abb11610117578063724c184c116100fc578063724c184c146102755780638456cb59146102a957806385945feb146102be57600080fd5b80635c975abb1461022b5780636dbffb781461025557600080fd5b80621c2ff6146101765780632e71d4a4146101d45780633f4ba83a146101f457806354fd4d501461020957600080fd5b366101715761016f6000336000620186a060006040518060200160405280600081525061053c565b005b600080fd5b34801561018257600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101e057600080fd5b5061016f6101ef366004615224565b610822565b34801561020057600080fd5b5061016f6111b3565b34801561021557600080fd5b5061021e6112d6565b6040516101cb91906152cf565b34801561023757600080fd5b506035546102459060ff1681565b60405190151581526020016101cb565b34801561026157600080fd5b506102456102703660046152e2565b611379565b34801561028157600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b557600080fd5b5061016f611450565b61016f6102cc366004615324565b61053c565b3480156102dd57600080fd5b506032546101aa9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561030a57600080fd5b506102456103193660046152e2565b60336020526000908152604090205460ff1681565b34801561033a57600080fd5b5061034e6103493660046153a7565b611570565b60405167ffffffffffffffff90911681526020016101cb565b34801561037357600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b50600154610403906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101cb565b34801561044857600080fd5b5061016f6104573660046153c2565b611589565b34801561046857600080fd5b5061016f6104773660046153df565b611776565b34801561048857600080fd5b506104da6104973660046152e2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101cb565b34801561051457600080fd5b506101aa7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f35773ffffffffffffffffffffffffffffffffffffffff8716156105f357604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6105fd8351611570565b67ffffffffffffffff168567ffffffffffffffff1610156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016105ea565b6201d4c08351111561070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016105ea565b87156107565761075673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308b611df8565b33328114610777575033731111000000000000000000000000000000001111015b6000898834898989604051602001610794969594939291906154bb565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161080491906152cf565b60405180910390a450506108188282611e93565b5050505050505050565b60355460ff161561088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105ea565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105ea565b6000610943826121b6565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003610a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016105ea565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abd9190615527565b81602001516fffffffffffffffffffffffffffffffff161015610b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105ea565b610ba781602001516fffffffffffffffffffffffffffffffff16612208565b610c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105ea565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190615560565b8251815191925014610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105ea565b610dfb81602001516fffffffffffffffffffffffffffffffff16612208565b610ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105ea565b60008381526033602052604090205460ff1615610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105ea565b6000838152603360209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905590860151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905586820151606088015192517fa9059cbb000000000000000000000000000000000000000000000000000000008152908216600482015260248101929092527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a91906155c5565b9050600061109a86604001518760a0015188608001518960c001516122ab565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050847fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b8280156110f45750835b604051901515815260200160405180910390a2808015611112575081155b801561111e5750326001145b156111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105ea565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e7061757365000000000000000000000000000000000000000000000060648201526084016105ea565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60606113017f0000000000000000000000000000000000000000000000000000000000000000612309565b61132a7f0000000000000000000000000000000000000000000000000000000000000000612309565b6113537f0000000000000000000000000000000000000000000000000000000000000000612309565b604051602001611365939291906155e2565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061144a9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f9190615560565b602001516fffffffffffffffffffffffffffffffff16612208565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e2070617573650000000000000000000000000000000000000000000000000060648201526084016105ea565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016112cc565b600061157d826010615687565b61144a906152086156b7565b600054610100900460ff16158080156115a95750600054600160ff909116105b806115c35750303b1580156115c3575060005460ff166001145b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105ea565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156116ad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905561170f612446565b801561177257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60355460ff16156117e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105ea565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105ea565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119549190615560565b51905061196e611969368690038601866156e3565b612529565b81146119fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105ea565b6000611a07876121b6565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580611b395750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b359190615560565b5114155b611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105ea565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c8e9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290611c84888a615749565b8a60400135612568565b611d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105ea565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611e8d90859061258c565b50505050565b600154600090611ec9907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436157cd565b90506000611ed561269d565b90506000816020015160ff16826000015163ffffffff16611ef69190615813565b9050821561202d57600154600090611f2d908390700100000000000000000000000000000000900467ffffffffffffffff1661587b565b90506000836040015160ff1683611f4491906158ef565b600154611f649084906fffffffffffffffffffffffffffffffff166158ef565b611f6e9190615813565b600154909150600090611fbf90611f989084906fffffffffffffffffffffffffffffffff166159ab565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612763565b90506001861115611fee57611feb611f9882876040015160ff1660018a611fe691906157cd565b612782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612060908490700100000000000000000000000000000000900467ffffffffffffffff166156b7565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105ea565b60015460009061216f906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615a1f565b9050600061218148633b9aca006127d7565b61218b9083615a5c565b905060005a61219a90886157cd565b905080821115610818576108186121b182846157cd565b6127ee565b80516020808301516040808501516060860151608087015160a088015160c089015194516000986121eb989097969101615a70565b604051602081830303815290604052805190602001209050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122999190615527565b6122a39083615ace565b421192915050565b60008060006122bb866000612817565b9050806122f1576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60608160000361234c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612376578061236081615ae6565b915061236f9050600a83615a5c565b9150612350565b60008167ffffffffffffffff81111561239157612391615034565b6040519080825280601f01601f1916602001820160405280156123bb576020820181803683370190505b5090505b841561243e576123d06001836157cd565b91506123dd600a86615b1e565b6123e8906030615ace565b60f81b8183815181106123fd576123fd615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612437600a86615a5c565b94506123bf565b949350505050565b600054610100900460ff166124dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105ea565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600081600001518260200151836040015184606001516040516020016121eb949392919093845260208401929092526040830152606082015260800190565b60008061257486612835565b905061258281868686612867565b9695505050505050565b60006125ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128979092919063ffffffff16565b805190915015612698578080602001905181019061260c91906155c5565b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105ea565b505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa15801561273a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275e9190615b86565b905090565b600061277861277285856128a6565b836128b6565b90505b9392505050565b6000670de0b6b3a76400006127c361279a8583615813565b6127ac90670de0b6b3a764000061587b565b6127be85670de0b6b3a76400006158ef565b6128c5565b6127cd90866158ef565b6127789190615813565b6000818310156127e7578161277b565b5090919050565b6000805a90505b825a61280190836157cd565b10156126985761281082615ae6565b91506127f5565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161285191815260200190565b6040516020818303038152906040529050919050565b600061288e846128788786866128f6565b8051602091820120825192909101919091201490565b95945050505050565b6060612778848460008561337e565b6000818312156127e7578161277b565b60008183126127e7578161277b565b600061277b670de0b6b3a7640000836128dd86613514565b6128e791906158ef565b6128f19190615813565b613758565b60606000845111612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016105ea565b600061296e84613997565b9050600061297b86613a86565b905060008460405160200161299291815260200190565b60405160208183030381529060405290506000805b84518110156132f55760008582815181106129c4576129c4615b32565b602002602001015190508451831115612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105ea565b82600003612b185780518051602091820120604051612aad92612a8792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105ea565b612c6f565b805151602011612bce5780518051602091820120604051612b4292612a8792910190815260200190565b612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105ea565b805184516020808701919091208251919092012014612c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105ea565b612c7b60106001615ace565b81602001515103612e5c5784518303612df4576000612cb78260200151601081518110612caa57612caa615b32565b6020026020010151613c21565b90506000815111612d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105ea565b60018751612d5891906157cd565b8314612de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105ea565b965061277b95505050505050565b6000858481518110612e0857612e08615b32565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612e3357612e33615b32565b60200260200101519050612e4681613d81565b9550612e53600186615ace565b945050506132e2565b60028160200151510361325a576000612e7482613da6565b9050600081600081518110612e8b57612e8b615b32565b016020015160f81c90506000612ea2600283615c25565b612ead906002615c47565b90506000612ebe848360ff16613dca565b90506000612ecc8a89613dca565b90506000612eda8383613e00565b905080835114612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105ea565b60ff851660021480612f81575060ff85166003145b156131755780825114613016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105ea565b60006130328860200151600181518110612caa57612caa615b32565b905060008151116130c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105ea565b60018d516130d391906157cd565b8914613161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105ea565b9c5061277b9b505050505050505050505050565b60ff85161580613188575060ff85166001145b156131c7576131b487602001516001815181106131a7576131a7615b32565b6020026020010151613d81565b99506131c0818a615ace565b985061324f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105ea565b5050505050506132e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105ea565b50806132ed81615ae6565b9150506129a7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105ea565b606082471015613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105ea565b73ffffffffffffffffffffffffffffffffffffffff85163b61348e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ea565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516134b79190615c6a565b60006040518083038185875af1925050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b5091509150613509828286613eaf565b979650505050505050565b600080821361357f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105ea565b6000606061358c84613f02565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361378957506000919050565b680755bf798b4a1bf1e582126137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105ea565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff8111156139b7576139b7615034565b6040519080825280602002602001820160405280156139fc57816020015b60408051808201909152606080825260208201528152602001906001900390816139d55790505b50905060005b82811015613a7e576040518060400160405280868381518110613a2757613a27615b32565b60200260200101518152602001613a56878481518110613a4957613a49615b32565b6020026020010151613fd8565b815250828281518110613a6b57613a6b615b32565b6020908102919091010152600101613a02565b509392505050565b80516060906000613a98826002615a1f565b67ffffffffffffffff811115613ab057613ab0615034565b6040519080825280601f01601f191660200182016040528015613ada576020820181803683370190505b5090506000805b83811015613c1757858181518110613afb57613afb615b32565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683613b57836002615a1f565b81518110613b6757613b67615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683613bc5836002615a1f565b613bd0906001615ace565b81518110613be057613be0615b32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613ae1565b5090949350505050565b60606000806000613c3185613feb565b919450925090506000816001811115613c4c57613c4c615c86565b14613cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105ea565b613ce38284615ace565b855114613d72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105ea565b61288e85602001518484614a58565b60606020826000015110613d9d57613d9882613c21565b61144a565b61144a82614af9565b606061144a613dc58360200151600081518110612caa57612caa615b32565b613a86565b606082518210613de9575060408051602081019091526000815261144a565b61277b8383848651613dfb91906157cd565b614b0f565b60008060008351855110613e15578351613e18565b84515b90505b8082108015613e9f5750838281518110613e3757613e37615b32565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916858381518110613e7657613e76615b32565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613a7e57816001019150613e1b565b60608315613ebe57508161277b565b825115613ece5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea91906152cf565b6000808211613f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105ea565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061144a613fe683614ce7565b614dd0565b6000806000808460000151116140a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105ea565b6020840151805160001a607f81116140ce576000600160009450945094505050614a51565b60b781116142dc5760006140e36080836157cd565b90508087600001511161419e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105ea565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061421757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6142c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105ea565b5060019550935060009250614a51915050565b60bf811161462a5760006142f160b7836157cd565b9050808760000151116143ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105ea565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361448a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105ea565b600184015160088302610100031c6037811161454e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105ea565b6145588184615ace565b89511161460d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105ea565b614618836001615ace565b9750955060009450614a519350505050565b60f7811161470b57600061463f60c0836157cd565b9050808760000151116146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105ea565b600195509350849250614a51915050565b600061471860f7836157cd565b9050808760000151116147d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105ea565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036148b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105ea565b600184015160088302610100031c60378111614975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105ea565b61497f8184615ace565b895111614a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105ea565b614a3f836001615ace565b9750955060019450614a519350505050565b9193909250565b606060008267ffffffffffffffff811115614a7557614a75615034565b6040519080825280601f01601f191660200182016040528015614a9f576020820181803683370190505b50905082600003614ab157905061277b565b6000614abd8587615ace565b90506020820160005b85811015614ade578281015182820152602001614ac6565b85811115614aed576000868301525b50919695505050505050565b606061144a826020015160008460000151614a58565b60608182601f011015614b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105ea565b828284011015614bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105ea565b81830184511015614c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105ea565b606082158015614c765760405191506000825260208201604052614cde565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614caf578051835260209283019201614c97565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105ea565b50604080518082019091528151815260209182019181019190915290565b60606000806000614de085613feb565b919450925090506001816001811115614dfb57614dfb615c86565b14614e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105ea565b8451614e948385615ace565b14614f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105ea565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081614f3a5790505090506000845b875181101561502857600080614fad6040518060400160405280858d60000151614f9191906157cd565b8152602001858d60200151614fa69190615ace565b9052613feb565b509150915060405180604001604052808383614fc99190615ace565b8152602001848c60200151614fde9190615ace565b815250858581518110614ff357614ff3615b32565b6020908102919091010152615009600185615ace565b93506150158183615ace565b61501f9084615ace565b92505050614f67565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561508657615086615034565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150d3576150d3615034565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146150ff57600080fd5b919050565b600082601f83011261511557600080fd5b813567ffffffffffffffff81111561512f5761512f615034565b61516060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161508c565b81815284602083860101111561517557600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082840312156151a457600080fd5b6151ac615063565b9050813581526151be602083016150db565b60208201526151cf604083016150db565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013567ffffffffffffffff81111561520c57600080fd5b61521884828501615104565b60c08301525092915050565b60006020828403121561523657600080fd5b813567ffffffffffffffff81111561524d57600080fd5b61243e84828501615192565b60005b8381101561527457818101518382015260200161525c565b83811115611e8d5750506000910152565b6000815180845261529d816020860160208601615259565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061277b6020830184615285565b6000602082840312156152f457600080fd5b5035919050565b803567ffffffffffffffff811681146150ff57600080fd5b801515811461532157600080fd5b50565b60008060008060008060c0878903121561533d57600080fd5b8635955061534d602088016150db565b945060408701359350615362606088016152fb565b9250608087013561537281615313565b915060a087013567ffffffffffffffff81111561538e57600080fd5b61539a89828a01615104565b9150509295509295509295565b6000602082840312156153b957600080fd5b61277b826152fb565b6000602082840312156153d457600080fd5b813561277b81615313565b600080600080600085870360e08112156153f857600080fd5b863567ffffffffffffffff8082111561541057600080fd5b61541c8a838b01615192565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561545557600080fd5b60408901955060c089013592508083111561546f57600080fd5b828901925089601f84011261548357600080fd5b823591508082111561549457600080fd5b508860208260051b84010111156154aa57600080fd5b959894975092955050506020019190565b8681528560208201528460408201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16606082015282151560f81b606882015260008251615515816069850160208701615259565b91909101606901979650505050505050565b60006020828403121561553957600080fd5b5051919050565b80516fffffffffffffffffffffffffffffffff811681146150ff57600080fd5b60006060828403121561557257600080fd5b6040516060810181811067ffffffffffffffff8211171561559557615595615034565b604052825181526155a860208401615540565b60208201526155b960408401615540565b60408201529392505050565b6000602082840312156155d757600080fd5b815161277b81615313565b600084516155f4818460208901615259565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615630816001850160208a01615259565b6001920191820152835161564b816002840160208801615259565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156156ae576156ae615658565b02949350505050565b600067ffffffffffffffff8083168185168083038211156156da576156da615658565b01949350505050565b6000608082840312156156f557600080fd5b6040516080810181811067ffffffffffffffff8211171561571857615718615034565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561576457615764615034565b8360051b602061577581830161508c565b86815291850191818101903684111561578d57600080fd5b865b848110156157c1578035868111156157a75760008081fd5b6157b336828b01615104565b84525091830191830161578f565b50979650505050505050565b6000828210156157df576157df615658565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615822576158226157e4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561587657615876615658565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156158b5576158b5615658565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156158e9576158e9615658565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561593057615930615658565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561596b5761596b615658565b6000871292508782058712848416161561598757615987615658565b8785058712818416161561599d5761599d615658565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156159e5576159e5615658565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615a1957615a19615658565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a5757615a57615658565b500290565b600082615a6b57615a6b6157e4565b500490565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615ac160e0830184615285565b9998505050505050505050565b60008219821115615ae157615ae1615658565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b1757615b17615658565b5060010190565b600082615b2d57615b2d6157e4565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff811681146150ff57600080fd5b805160ff811681146150ff57600080fd5b600060c08284031215615b9857600080fd5b60405160c0810181811067ffffffffffffffff82111715615bbb57615bbb615034565b604052615bc783615b61565b8152615bd560208401615b75565b6020820152615be660408401615b75565b6040820152615bf760608401615b61565b6060820152615c0860808401615b61565b6080820152615c1960a08401615540565b60a08201529392505050565b600060ff831680615c3857615c386157e4565b8060ff84160691505092915050565b600060ff821660ff841680821015615c6157615c61615658565b90039392505050565b60008251615c7c818460208701615259565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036101206040523480156200001257600080fd5b5073420000000000000000000000000000000000001060006040518060400160405280600581526020016422ba3432b960d91b815250604051806040016040528060048152602001630ae8aa8960e31b8152506001600080848481600390816200007d91906200015b565b5060046200008c82826200015b565b50505060809290925260a05260c05250506001600160a01b0390811660e052166101005262000227565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000e157607f821691505b6020821081036200010257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015657600081815260208120601f850160051c81016020861015620001315750805b601f850160051c820191505b8181101562000152578281556001016200013d565b5050505b505050565b81516001600160401b03811115620001775762000177620000b6565b6200018f81620001888454620000cc565b8462000108565b602080601f831160018114620001c75760008415620001ae5750858301515b600019600386901b1c1916600185901b17855562000152565b600085815260208120601f198616915b82811015620001f857888601518255948401946001909101908401620001d7565b5085821015620002175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161156c6200027a600039600081816102f5015261038a0152600081816101a9015261031b0152600061070f015260006106e6015260006106bd015261156c6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e1461033f578063e78cea92146102f3578063ee9a31a21461038557600080fd5b8063ae1f6aaf146102f3578063c01e1bd614610319578063d6c0b2c41461031957600080fd5b80639dc29fac116100bd5780639dc29fac146102ba578063a457c2d7146102cd578063a9059cbb146102e057600080fd5b806370a082311461027c57806395d89b41146102b257600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461024c57806340c10f191461025f57806354fd4d501461027457600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a3660046111a8565b6103ac565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f861049d565b60405161019b919061121d565b61018f610213366004611297565b61052f565b6002545b60405190815260200161019b565b61018f6102383660046112c1565b610547565b6040516012815260200161019b565b61018f61025a366004611297565b61056b565b61027261026d366004611297565b6105b7565b005b6101f86106b6565b61021c61028a3660046112fd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610759565b6102726102c8366004611297565b610768565b61018f6102db366004611297565b610869565b61018f6102ee366004611297565b61093a565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61034d366004611318565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061046557507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061049457507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ac9061134b565b80601f01602080910402602001604051908101604052809291908181526020018280546104d89061134b565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b60003361053d818585610948565b5060019392505050565b600033610555858285610afc565b610560858585610bd3565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061053d90829086906105b29087906113cd565b610948565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152609560248201527f42564d5f4554483a206d696e742069732064697361626c6564206279206e6f7260448201527f6d616c20636f6e74726163742063616c6c696e672e2042564d5f455448206d6960648201527f6e742063616e206f6e6c792062652074726967676572656420696e206465706f60848201527f736974207472616e73616374696f6e20657865637574696f6e2c2073696d696c60a48201527f617220746f204d4e54206d696e74206f6e204c322e000000000000000000000060c482015260e4015b60405180910390fd5b60606106e17f0000000000000000000000000000000000000000000000000000000000000000610e86565b61070a7f0000000000000000000000000000000000000000000000000000000000000000610e86565b6107337f0000000000000000000000000000000000000000000000000000000000000000610e86565b604051602001610745939291906113e5565b604051602081830303815290604052905090565b6060600480546104ac9061134b565b337342000000000000000000000000000000000000161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79204c324d6560448201527f73736167655061737365722063616e206275726e00000000000000000000000060648201526084016106ad565b6108158282610fc3565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161085d91815260200190565b60405180910390a25050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ad565b6105608286868403610948565b60003361053d818585610bd3565b73ffffffffffffffffffffffffffffffffffffffff83166109ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff8216610a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bcd5781811015610bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ad565b610bcd8484848403610948565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff8216610d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e139084906113cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e7991815260200190565b60405180910390a3610bcd565b606081600003610ec957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610ef35780610edd8161145b565b9150610eec9050600a836114c2565b9150610ecd565b60008167ffffffffffffffff811115610f0e57610f0e6114d6565b6040519080825280601f01601f191660200182016040528015610f38576020820181803683370190505b5090505b8415610fbb57610f4d600183611505565b9150610f5a600a8661151c565b610f659060306113cd565b60f81b818381518110610f7a57610f7a611530565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610fb4600a866114c2565b9450610f3c565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611158908490611505565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aef565b6000602082840312156111ba57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111ea57600080fd5b9392505050565b60005b8381101561120c5781810151838201526020016111f4565b83811115610bcd5750506000910152565b602081526000825180602084015261123c8160408501602087016111f1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461129257600080fd5b919050565b600080604083850312156112aa57600080fd5b6112b38361126e565b946020939093013593505050565b6000806000606084860312156112d657600080fd5b6112df8461126e565b92506112ed6020850161126e565b9150604084013590509250925092565b60006020828403121561130f57600080fd5b6111ea8261126e565b6000806040838503121561132b57600080fd5b6113348361126e565b91506113426020840161126e565b90509250929050565b600181811c9082168061135f57607f821691505b602082108103611398577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113e0576113e061139e565b500190565b600084516113f78184602089016111f1565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611433816001850160208a016111f1565b6001920191820152835161144e8160028401602088016111f1565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361148c5761148c61139e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826114d1576114d1611493565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156115175761151761139e565b500390565b60008261152b5761152b611493565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a60a060405260c86080523480156200001657600080fd5b50620000216200004e565b6200004833620000346012600a62000824565b620000429061271062000832565b62000111565b6200089f565b600054610100900460ff1615620000bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084015b60405180910390fd5b60005460ff90811610156200010f576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6200012882826200012c60201b620013841760201c565b5050565b620001438282620001e060201b620014511760201c565b6001600160e01b0362000157620002cf8216565b1115620001c05760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401620000b3565b620001da61013262001579620002d560201b1783620002ec565b50505050565b6001600160a01b038216620002385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000b3565b80603560008282546200024c919062000854565b90915550506001600160a01b038216600090815260336020526040812080548392906200027b90849062000854565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36200012860008383620004a3565b60355490565b6000620002e3828462000854565b90505b92915050565b8254600090819080156200033e5785620003086001836200086f565b815481106200031b576200031b62000889565b60009182526020909120015464010000000090046001600160e01b031662000341565b60005b6001600160e01b031692506200035883858760201c565b91506000811180156200039c57504386620003756001846200086f565b8154811062000388576200038862000889565b60009182526020909120015463ffffffff16145b156200041057620003b882620004bb60201b620015851760201c565b86620003c66001846200086f565b81548110620003d957620003d962000889565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b0316021790555062000495565b85604051806040016040528062000432436200052a60201b620016371760201c565b63ffffffff1681526020016200045385620004bb60201b620015851760201c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b505050565b6200049e8383836200059160201b620016cd1760201c565b60006001600160e01b03821115620005265760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401620000b3565b5090565b600063ffffffff821115620005265760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401620000b3565b620005a98383836200049e60201b620009451760201c565b6001600160a01b03838116600090815261013060205260408082205485841683529120546200049e92918216911683818314801590620005e95750600081115b156200049e576001600160a01b0383161562000677576001600160a01b0383166000908152610131602090815260408220829162000634919062000703901b6200170d1785620002ec565b91509150846001600160a01b031660008051602062003c8d83398151915283836040516200066c929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200049e576001600160a01b03821660009081526101316020908152604082208291620006bc9190620002d5901b620015791785620002ec565b91509150836001600160a01b031660008051602062003c8d8339815191528383604051620006f4929190918252602082015260400190565b60405180910390a25050505050565b6000620002e382846200086f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007685781600019048211156200074c576200074c62000711565b808516156200075a57918102915b93841c93908002906200072c565b509250929050565b6000826200078157506001620002e6565b816200079057506000620002e6565b8160018114620007a95760028114620007b457620007d4565b6001915050620002e6565b60ff841115620007c857620007c862000711565b50506001821b620002e6565b5060208310610133831016604e8410600b8410161715620007f9575081810a620002e6565b62000805838362000727565b80600019048211156200081c576200081c62000711565b029392505050565b6000620002e3838362000770565b60008160001904831182151516156200084f576200084f62000711565b500290565b600082198211156200086a576200086a62000711565b500190565b60008282101562000884576200088462000711565b500390565b634e487b7160e01b600052603260045260246000fd5b6080516133c4620008c9600039600081816105400152818161067b01526106d001526133c46000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806379cc679011610145578063a9f8ad04116100bd578063da35a26f1161008c578063e40172b311610071578063e40172b31461053b578063f1127ed814610562578063f2fde38b146105b457600080fd5b8063da35a26f146104e2578063dd62ed3e146104f557600080fd5b8063a9f8ad04146104a7578063c3cda520146104b2578063cf665443146104c5578063d505accf146104cf57600080fd5b80638e539e8c116101145780639ab24eb0116100f95780639ab24eb01461046e578063a457c2d714610481578063a9059cbb1461049457600080fd5b80638e539e8c1461045357806395d89b411461046657600080fd5b806379cc6790146104065780637ecebe001461041957806389110e5d1461042c5780638da5cb5b1461043557600080fd5b80633a46b1a8116101d85780635c19a95c116101a75780636fcfff451161018c5780636fcfff45146103a057806370a08231146103c8578063715018a6146103fe57600080fd5b80635c19a95c146103835780636561e2111461039657600080fd5b80633a46b1a8146102eb57806340c10f19146102fe57806342966c6814610311578063587cde1e1461032457600080fd5b806323b872dd1161021457806323b872dd146102ae578063313ce567146102c15780633644e515146102d057806339509351146102d857600080fd5b806306fdde0314610246578063095ea7b31461026457806318160ddd146102875780631ae7f5f314610299575b600080fd5b61024e6105c7565b60405161025b9190612e00565b60405180910390f35b610277610272366004612e9c565b610659565b604051901515815260200161025b565b6035545b60405190815260200161025b565b6102ac6102a7366004612ec6565b610671565b005b6102776102bc366004612edf565b610749565b6040516012815260200161025b565b61028b61076d565b6102776102e6366004612e9c565b61077c565b61028b6102f9366004612e9c565b6107c8565b6102ac61030c366004612e9c565b61086a565b6102ac61031f366004612ec6565b61094a565b61035e610332366004612f1b565b73ffffffffffffffffffffffffffffffffffffffff908116600090815261013060205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b6102ac610391366004612f1b565b610957565b61028b6101625481565b6103b36103ae366004612f1b565b610961565b60405163ffffffff909116815260200161025b565b61028b6103d6366004612f1b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b6102ac610997565b6102ac610414366004612e9c565b6109ab565b61028b610427366004612f1b565b6109c4565b61028b61271081565b60975473ffffffffffffffffffffffffffffffffffffffff1661035e565b61028b610461366004612ec6565b6109ef565b61024e610a66565b61028b61047c366004612f1b565b610a75565b61027761048f366004612e9c565b610b42565b6102776104a2366004612e9c565b610c13565b61028b6301e1338081565b6102ac6104c0366004612f47565b610c21565b61028b6101635481565b6102ac6104dd366004612f9f565b610d98565b6102ac6104f0366004613009565b610f57565b61028b610503366004613035565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b61057561057036600461305f565b611229565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16928101929092520161025b565b6102ac6105c2366004612f1b565b6112d0565b6060603680546105d69061309f565b80601f01602080910402602001604051908101604052809291908181526020018280546106029061309f565b801561064f5780601f106106245761010080835404028352916020019161064f565b820191906000526020600020905b81548152906001019060200180831161063257829003601f168201915b5050505050905090565b600033610667818585611719565b5060019392505050565b6106796118cc565b7f0000000000000000000000000000000000000000000000000000000000000000811115610701576040517fba96c68c000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b610162805490829055604080518281526020810184905233917fe2ee754bdb1a4ec4a5ecd3f810e4e7ca817cbbc379c89ff4e7a8b4dc6841a766910160405180910390a25050565b60003361075785828561194d565b610762858585611a1e565b506001949350505050565b6000610777611cd7565b905090565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061066790829086906107c390879061311b565b611719565b6000438210610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106f8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152610131602052604090206108639083611d52565b9392505050565b6108726118cc565b60006127106101625461088460355490565b61088e9190613133565b6108989190613170565b9050808211156108de576040517f5d84733f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016106f8565b6101635442101561092957610163546040517fea14abd200000000000000000000000000000000000000000000000000000000815242600482015260248101919091526044016106f8565b6109376301e133804261311b565b610163556109458383611e39565b505050565b6109543382611e43565b50565b6109543382611e4d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152610131602052604081205461099190611637565b92915050565b61099f6118cc565b6109a96000611eed565b565b6109b682338361194d565b6109c08282611e43565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260fd6020526040812054610991565b6000438210610a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106f8565b61099161013283611d52565b6060603780546105d69061309f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261013160205260408120548015610b1a5773ffffffffffffffffffffffffffffffffffffffff8316600090815261013160205260409020610ad36001836131ab565b81548110610ae357610ae36131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b1d565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106f8565b6107628286868403611719565b600033610667818585611a1e565b83421115610c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106f8565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610d1290610d0a9060a00160405160208183030381529060405280519060200120611f64565b858585611fcd565b9050610d1d81611ff5565b8614610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106f8565b610d8f8188611e4d565b50505050505050565b83421115610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106f8565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e318c611ff5565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e9982611f64565b90506000610ea982878787611fcd565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106f8565b610f4b8a8a8a611719565b50505050505050505050565b600054610100900460ff1615808015610f775750600054600160ff909116105b80610f915750303b158015610f91575060005460ff166001145b61101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106f8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b82158061109c575073ffffffffffffffffffffffffffffffffffffffff8216155b156110d3576040517ff57dc27600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111476040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4e54000000000000000000000000000000000000000000000000000000000081525061202a565b61114f6120cb565b611157612162565b6111956040518060400160405280600681526020017f4d616e746c650000000000000000000000000000000000000000000000000000815250612201565b61119d6120cb565b6111a78284611e39565b6111b56301e133804261311b565b610163556111c282611eed565b801561094557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff8316600090815261013160205260409020805463ffffffff841690811061127b5761127b6131c2565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b6112d86118cc565b73ffffffffffffffffffffffffffffffffffffffff811661137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f8565b61095481611eed565b61138e8282611451565b6035547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff101561143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f7465730000000000000000000000000000000060648201526084016106f8565b61144b610132611579836122d7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106f8565b80603560008282546114e0919061311b565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260408120805483929061151a90849061311b565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36109c0600083836124b9565b6000610863828461311b565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f323420626974730000000000000000000000000000000000000000000000000060648201526084016106f8565b5090565b600063ffffffff821115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f322062697473000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526101306020526040808220548584168352912054610945929182169116836124c4565b600061086382846131ab565b73ffffffffffffffffffffffffffffffffffffffff83166117bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff821661185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461144b5781811015611a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106f8565b61144b8484848403611719565b73ffffffffffffffffffffffffffffffffffffffff8316611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff8216611b64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015611c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290611c5e90849061311b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc491815260200190565b60405180910390a361144b8484846124b9565b60006107777f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611d0660c95490565b60ca546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b81811015611db6576000611d6d828461266b565b905084868281548110611d8257611d826131c2565b60009182526020909120015463ffffffff161115611da257809250611db0565b611dad81600161311b565b91505b50611d59565b8115611e0f5784611dc86001846131ab565b81548110611dd857611dd86131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611e12565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b6109c08282611384565b6109c08282612686565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526101306020818152604080842080546033845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461144b8284836124c4565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610991611f71611cd7565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611fde8787878761269f565b91509150611feb816127b7565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260fd602052604090208054600181018255905b50919050565b600054610100900460ff166120c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109c08282612a0b565b600054610100900460ff166109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b600054610100900460ff166121f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109a9612abb565b600054610100900460ff16612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b610954816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612b5b565b82546000908190801561233757856122f06001836131ab565b81548110612300576123006131c2565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661233a565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061236883858763ffffffff16565b91506000811180156123a6575043866123826001846131ab565b81548110612392576123926131c2565b60009182526020909120015463ffffffff16145b15612430576123b482611585565b866123c06001846131ab565b815481106123d0576123d06131c2565b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506124b0565b85604051806040016040528061244543611637565b63ffffffff16815260200161245985611585565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6109458383836116cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125005750600081115b156109455773ffffffffffffffffffffffffffffffffffffffff8316156125b65773ffffffffffffffffffffffffffffffffffffffff831660009081526101316020526040812081906125569061170d856122d7565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125ab929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff8216156109455773ffffffffffffffffffffffffffffffffffffffff8216600090815261013160205260408120819061260790611579856122d7565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161265c929190918252602082015260400190565b60405180910390a25050505050565b600061267a6002848418613170565b6108639084841661311b565b6126908282612c0c565b61144b61013261170d836122d7565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156126d657506000905060036127ae565b8460ff16601b141580156126ee57508460ff16601c14155b156126ff57506000905060046127ae565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612753573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166127a7576000600192509250506127ae565b9150600090505b94509492505050565b60008160048111156127cb576127cb6131f1565b036127d35750565b60018160048111156127e7576127e76131f1565b0361284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106f8565b6002816004811115612862576128626131f1565b036128c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106f8565b60038160048111156128dd576128dd6131f1565b0361296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b600481600481111561297e5761297e6131f1565b03610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b600054610100900460ff16612aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6036612aae838261329d565b506037610945828261329d565b600054610100900460ff16612b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b6109a933611eed565b600054610100900460ff16612bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106f8565b81516020928301208151919092012060c99190915560ca55565b73ffffffffffffffffffffffffffffffffffffffff8216612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604090205481811015612d65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106f8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603360205260408120838303905560358054849290612da19084906131ab565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610945836000846124b9565b600060208083528351808285015260005b81811015612e2d57858101830151858201604001528201612e11565b81811115612e3f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612e9757600080fd5b919050565b60008060408385031215612eaf57600080fd5b612eb883612e73565b946020939093013593505050565b600060208284031215612ed857600080fd5b5035919050565b600080600060608486031215612ef457600080fd5b612efd84612e73565b9250612f0b60208501612e73565b9150604084013590509250925092565b600060208284031215612f2d57600080fd5b61086382612e73565b803560ff81168114612e9757600080fd5b60008060008060008060c08789031215612f6057600080fd5b612f6987612e73565b95506020870135945060408701359350612f8560608801612f36565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612fba57600080fd5b612fc388612e73565b9650612fd160208901612e73565b95506040880135945060608801359350612fed60808901612f36565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561301c57600080fd5b8235915061302c60208401612e73565b90509250929050565b6000806040838503121561304857600080fd5b61305183612e73565b915061302c60208401612e73565b6000806040838503121561307257600080fd5b61307b83612e73565b9150602083013563ffffffff8116811461309457600080fd5b809150509250929050565b600181811c908216806130b357607f821691505b602082108103612024577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561312e5761312e6130ec565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561316b5761316b6130ec565b500290565b6000826131a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156131bd576131bd6130ec565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561094557600081815260208120601f850160051c810160208610156132765750805b601f850160051c820191505b8181101561329557828155600101613282565b505050505050565b815167ffffffffffffffff8111156132b7576132b7613220565b6132cb816132c5845461309f565b8461324f565b602080601f83116001811461331e57600084156132e85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613295565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561336b5788860151825594840194600190910190840161334c565b50858210156133a757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c634300080f000adec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7246101806040523480156200001257600080fd5b5060405162001b0238038062001b02833981016040819052620000359162000356565b6001608052600360a052600060c05285620000bd5760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e203000000000000000000000000060648201526084015b60405180910390fd5b60008711620001355760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000b4565b60e08790526101008690526001600160a01b038084166101405282166101205261016081905262000167858562000174565b50505050505050620003be565b600054610100900460ff1615808015620001955750600054600160ff909116105b80620001c55750620001b2306200032a60201b620012691760201c565b158015620001c5575060005460ff166001145b6200022a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b4565b6000805460ff1916600117905580156200024e576000805461ff0019166101001790555b42821115620002d45760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000b4565b60028290556001839055801562000325576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146200035157600080fd5b919050565b600080600080600080600060e0888a0312156200037257600080fd5b87519650602088015195506040880151945060608801519350620003996080890162000339565b9250620003a960a0890162000339565b915060c0880151905092959891949750929550565b60805160a05160c05160e051610100516101205161014051610160516116bb620004476000396000818161041501526108f601526000818161036c0152610a66015260008181610236015261079001526000818161015a0152610f9d0152600081816101b60152610feb01526000610503015260006104da015260006104b101526116bb6000f3fe6080604052600436106101435760003560e01c806388786272116100c0578063cf8e5cf011610074578063dcec334811610059578063dcec3348146103ce578063e4a30116146103e3578063f4daa2911461040357600080fd5b8063cf8e5cf01461038e578063d1de856c146103ae57600080fd5b80639aaab648116100a55780639aaab648146102eb578063a25ae557146102fe578063bffa7f0f1461035a57600080fd5b806388786272146102b357806389c44cbb146102c957600080fd5b806369f16eec116101175780636b4d98dd116100fc5780636b4d98dd1461022457806370872aa51461027d5780637f0064201461029357600080fd5b806369f16eec146101fa5780636abcf5631461020f57600080fd5b80622134cc146101485780634599c7881461018f578063529933df146101a457806354fd4d50146101d8575b600080fd5b34801561015457600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561019b57600080fd5b5061017c610437565b3480156101b057600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101e457600080fd5b506101ed6104aa565b60405161018691906113f2565b34801561020657600080fd5b5061017c61054d565b34801561021b57600080fd5b5060035461017c565b34801561023057600080fd5b506102587f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610186565b34801561028957600080fd5b5061017c60015481565b34801561029f57600080fd5b5061017c6102ae366004611443565b61055f565b3480156102bf57600080fd5b5061017c60025481565b3480156102d557600080fd5b506102e96102e4366004611443565b610778565b005b6102e96102f936600461145c565b610a4e565b34801561030a57600080fd5b5061031e610319366004611443565b610ecd565b60408051825181526020808401516fffffffffffffffffffffffffffffffff908116918301919091529282015190921690820152606001610186565b34801561036657600080fd5b506102587f000000000000000000000000000000000000000000000000000000000000000081565b34801561039a57600080fd5b5061031e6103a9366004611443565b610f61565b3480156103ba57600080fd5b5061017c6103c9366004611443565b610f99565b3480156103da57600080fd5b5061017c610fe7565b3480156103ef57600080fd5b506102e96103fe36600461148e565b61101c565b34801561040f57600080fd5b5061017c7f000000000000000000000000000000000000000000000000000000000000000081565b600354600090156104a15760038054610452906001906114df565b81548110610462576104626114f6565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606104d57f0000000000000000000000000000000000000000000000000000000000000000611285565b6104fe7f0000000000000000000000000000000000000000000000000000000000000000611285565b6105277f0000000000000000000000000000000000000000000000000000000000000000611285565b60405160200161053993929190611525565b604051602081830303815290604052905090565b6003546000906104a5906001906114df565b6000610569610437565b821115610623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6003546106d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161061a565b6003546000905b8082101561077157600060026106f5838561159b565b6106ff91906115e2565b90508460038281548110610715576107156114f6565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1610156107675761076081600161159b565b925061076b565b8091505b506106df565b5092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161061a565b60035481106108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161061a565b7f000000000000000000000000000000000000000000000000000000000000000060038281548110610928576109286114f6565b6000918252602090912060016002909202010154610958906fffffffffffffffffffffffffffffffff16426114df565b10610a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161061a565b6000610a1660035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161061a565b610b41610fe7565b8314610bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161061a565b42610bff84610f99565b10610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161061a565b83610d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161061a565b8115610dd55781814014610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161061a565b82610ddf60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e242604051610e1191815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b604080516060810182526000808252602082018190529181019190915260038281548110610efd57610efd6114f6565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b60408051606081018252600080825260208201819052918101919091526003610f898361055f565b81548110610efd57610efd6114f6565b60007f000000000000000000000000000000000000000000000000000000000000000060015483610fca91906114df565b610fd491906115f6565b600254610fe1919061159b565b92915050565b60007f0000000000000000000000000000000000000000000000000000000000000000611012610437565b6104a5919061159b565b600054610100900460ff161580801561103c5750600054600160ff909116105b806110565750303b158015611056575060005460ff166001145b6110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161061a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561114057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156111f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161061a565b60028290556001839055801561126457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036112c857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156112f257806112dc81611633565b91506112eb9050600a836115e2565b91506112cc565b60008167ffffffffffffffff81111561130d5761130d61166b565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b5090505b84156113ba5761134c6001836114df565b9150611359600a8661169a565b61136490603061159b565b60f81b818381518110611379576113796114f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506113b3600a866115e2565b945061133b565b949350505050565b60005b838110156113dd5781810151838201526020016113c5565b838111156113ec576000848401525b50505050565b60208152600082518060208401526114118160408501602087016113c2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561145557600080fd5b5035919050565b6000806000806080858703121561147257600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156114a157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156114f1576114f16114b0565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600084516115378184602089016113c2565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611573816001850160208a016113c2565b6001920191820152835161158e8160028401602088016113c2565b0160020195945050505050565b600082198211156115ae576115ae6114b0565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826115f1576115f16115b3565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561162e5761162e6114b0565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611664576116646114b0565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826116a9576116a96115b3565b50069056fea164736f6c634300080f000a60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280610ad461004a8239600061049a01526000610471015260006104480152610ad46000f3fe6080604052600436106100695760003560e01c806354fd4d501161004357806354fd4d50146100e957806382e3702d1461010b578063ecc704281461014b57600080fd5b806339fd0090146100945780633f827a5a146100a757806344df8e70146100d457600080fd5b3661008f5761008d600033620186a0604051806020016040528060008152506101b0565b005b600080fd5b61008d6100a23660046106dd565b6101b0565b3480156100b357600080fd5b506100bc600181565b60405161ffff90911681526020015b60405180910390f35b3480156100e057600080fd5b5061008d610409565b3480156100f557600080fd5b506100fe610441565b6040516100cb9190610865565b34801561011757600080fd5b5061013b61012636600461087f565b60006020819052908152604090205460ff1681565b60405190151581526020016100cb565b34801561015757600080fd5b506101a26001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100cb565b831561023b576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273deaddeaddeaddeaddeaddeaddeaddeaddead111190639dc29fac90604401600060405180830381600087803b15801561022257600080fd5b505af1158015610236573d6000803e3d6000fd5b505050505b60006102d86040518060e001604052806102956001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810188905260a0810186905260c0018490526104e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103736001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f5da382596b838a63b4248e533d8e399b3b0f13ba6c6679f670489d44716cb17334898888886040516103aa959493929190610898565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b4761041381610536565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061046c7f0000000000000000000000000000000000000000000000000000000000000000610565565b6104957f0000000000000000000000000000000000000000000000000000000000000000610565565b6104be7f0000000000000000000000000000000000000000000000000000000000000000610565565b6040516020016104d0939291906108cf565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610519989097969101610945565b604051602081830303815290604052805190602001209050919050565b80604051610543906106a2565b6040518091039082f0905080158015610560573d6000803e3d6000fd5b505050565b6060816000036105a857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156105d257806105bc816109d2565b91506105cb9050600a83610a39565b91506105ac565b60008167ffffffffffffffff8111156105ed576105ed6106ae565b6040519080825280601f01601f191660200182016040528015610617576020820181803683370190505b5090505b841561069a5761062c600183610a4d565b9150610639600a86610a64565b610644906030610a78565b60f81b81838151811061065957610659610a90565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610693600a86610a39565b945061061b565b949350505050565b600880610ac083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156106f357600080fd5b84359350602085013573ffffffffffffffffffffffffffffffffffffffff8116811461071e57600080fd5b925060408501359150606085013567ffffffffffffffff8082111561074257600080fd5b818701915087601f83011261075657600080fd5b813581811115610768576107686106ae565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107ae576107ae6106ae565b816040528281528a60208487010111156107c757600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60005b838110156108065781810151838201526020016107ee565b83811115610815576000848401525b50505050565b600081518084526108338160208601602086016107eb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610878602083018461081b565b9392505050565b60006020828403121561089157600080fd5b5035919050565b85815284602082015283604082015260a0606082015260006108bd60a083018561081b565b90508260808301529695505050505050565b600084516108e18184602089016107eb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161091d816001850160208a016107eb565b600192019182015283516109388160028401602088016107eb565b0160020195945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261099660e083018461081b565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a0357610a036109a3565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610a4857610a48610a0a565b500490565b600082821015610a5f57610a5f6109a3565b500390565b600082610a7357610a73610a0a565b500690565b60008219821115610a8b57610a8b6109a3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe608060405230fffea164736f6c634300080f000a608060405260008054600160ff19918216811790925560048054909116909117905534801561002d57600080fd5b50614ad08061003d6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063916a17c6116100cd578063ba414fa611610081578063e20a678911610066578063e20a6789146102bb578063e20c9f71146102ce578063fa7626d4146102d657600080fd5b8063ba414fa614610290578063dcf5edef146102a857600080fd5b8063af58c54c116100b2578063af58c54c14610262578063b5508aa914610275578063b69c56021461027d57600080fd5b8063916a17c61461023a578063ae04fe3e1461024257600080fd5b80633f7286f41161012457806366d9a9a01161010957806366d9a9a0146101ed5780637e577a1b1461020257806385226c811461022557600080fd5b80633f7286f4146101bd578063526dc955146101c557600080fd5b806313fa6ab8146101565780631ed7831c1461017c5780633e5e3c23146101915780633f47606914610199575b600080fd5b610169610164366004613e9f565b6102e3565b6040519081526020015b60405180910390f35b610184610a46565b6040516101739190613f24565b610184610ab5565b6101ac6101a7366004613f7e565b610b22565b604051610173959493929190614104565b6101846112b2565b6101d86101d336600461412f565b61131f565b60408051928352602083019190915201610173565b6101f5611583565b6040516101739190614148565b61021561021036600461423e565b611694565b6040516101739493929190614287565b61022d611913565b60405161017391906142c6565b6101f56119e3565b610255610250366004613e9f565b611aeb565b6040516101739190614346565b610169610270366004614371565b612241565b61022d612abb565b61016961028b366004613e9f565b612b8b565b610298612c3e565b6040519015158152602001610173565b6101696102b636600461440e565b612d9e565b6102556102c9366004614440565b612fd0565b610184613a0a565b6000546102989060ff1681565b6040805160098082526101408201909252600091829190816020015b60608152602001906001900390816102ff579050509050604051806060016040528060318152602001614a2e60319139816000815181106103425761034261447c565b60200260200101819052506040518060400160405280600e81526020017f686173685769746864726177616c000000000000000000000000000000000000815250816001815181106103965761039661447c565b60209081029190910101526040517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481018a9052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561040a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045091908101906144db565b816002815181106104635761046361447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa1580156104ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261053291908101906144db565b816003815181106105455761054561447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261061491908101906144db565b816004815181106106275761062761447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561069b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106e191908101906144db565b816005815181106106f4576106f461447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107ae91908101906144db565b816006815181106107c1576107c161447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610835573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261087b91908101906144db565b8160078151811061088e5761088e61447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906108e9908690600401614346565b600060405180830381865afa158015610906573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261094c91908101906144db565b8160088151811061095f5761095f61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906109bd9085906004016142c6565b6000604051808303816000875af11580156109dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a229190810190614544565b905080806020019051810190610a389190614579565b9a9950505050505050505050565b6060600d805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575b5050505050905090565b6060600f805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b60008080806060816009604051908082528060200260200182016040528015610b5f57816020015b6060815260200190600190039081610b4a5790505b509050604051806060016040528060318152602001614a2e6031913981600081518110610b8e57610b8e61447c565b6020026020010181905250604051806060016040528060238152602001614aa16023913981600181518110610bc557610bc561447c565b602090810291909101015286516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c8291908101906144db565b81600281518110610c9557610c9561447c565b6020908102919091018101919091528701516040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610d6c91908101906144db565b81600381518110610d7f57610d7f61447c565b602090810291909101015260408781015190517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e5491908101906144db565b81600481518110610e6757610e6761447c565b602090810291909101015260608701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f2791908101906144db565b81600581518110610f3a57610f3a61447c565b602090810291909101015260808701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015610fb4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ffa91908101906144db565b8160068151811061100d5761100d61447c565b602090810291909101015260a08701516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611087573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110cd91908101906144db565b816007815181106110e0576110e061447c565b602090810291909101015260c08701516040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d916371aad10d9161113f9190600401614346565b600060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111a291908101906144db565b816008815181106111b5576111b561447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906112139085906004016142c6565b6000604051808303816000875af1158015611232573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112789190810190614544565b90506000806000806000858060200190518101906112969190614631565b939f50919d509b50995097505050505050505091939590929450565b6060600e805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b6040805160038082526080820190925260009182918291816020015b606081526020019060019003908161133b579050509050604051806060016040528060318152602001614a2e603191398160008151811061137e5761137e61447c565b60200260200101819052506040518060400160405280601481526020017f6465636f646556657273696f6e65644e6f6e6365000000000000000000000000815250816001815181106113d2576113d261447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611446573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261148c91908101906144db565b8160028151811061149f5761149f61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906114fd9085906004016142c6565b6000604051808303816000875af115801561151c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115629190810190614544565b9050808060200190518101906115789190614695565b935093505050915091565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561168b57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561167357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116116205790505b505050505081525050815260200190600101906115a7565b50505050905090565b60408051600580825260c08201909252600091606091829182918591816020015b60608152602001906001900390816116b55790505090506040518060400160405280601a81526020017f2e2f746573742d636173652d67656e657261746f722f66757a7a000000000000815250816000815181106117155761171561447c565b60200260200101819052506040518060400160405280600281526020017f2d6d000000000000000000000000000000000000000000000000000000000000815250816001815181106117695761176961447c565b60200260200101819052506040518060400160405280600481526020017f7472696500000000000000000000000000000000000000000000000000000000815250816002815181106117bd576117bd61447c565b60200260200101819052506040518060400160405280600281526020017f2d76000000000000000000000000000000000000000000000000000000000000815250816003815181106118115761181161447c565b602002602001018190525085816004815181106118305761183061447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061188b9084906004016142c6565b6000604051808303816000875af11580156118aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118f09190810190614544565b80602001905181019061190391906146b9565b9450945094509450509193509193565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561168b5783829060005260206000200180546119569061474b565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061474b565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b505050505081526020019060010190611937565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561168b57600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015611ad357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a805790505b50505050508152505081526020019060010190611a07565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611b08579050509050604051806060016040528060318152602001614a2e6031913981600081518110611b4b57611b4b61447c565b60200260200101819052506040518060400160405280601881526020017f656e636f646543726f7373446f6d61696e4d657373616765000000000000000081525081600181518110611b9f57611b9f61447c565b60209081029190910101526040517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481018a9052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611c5991908101906144db565b81600281518110611c6c57611c6c61447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611cf5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611d3b91908101906144db565b81600381518110611d4e57611d4e61447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e1d91908101906144db565b81600481518110611e3057611e3061447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611eea91908101906144db565b81600581518110611efd57611efd61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015611f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fb791908101906144db565b81600681518110611fca57611fca61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa15801561203e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261208491908101906144db565b816007815181106120975761209761447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d906120f2908690600401614346565b600060405180830381865afa15801561210f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261215591908101906144db565b816008815181106121685761216861447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906121c69085906004016142c6565b6000604051808303816000875af11580156121e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261222b9190810190614544565b905080806020019051810190610a389190614544565b60408051600b8082526101808201909252600091829190816020015b606081526020019060019003908161225d579050509050604051806060016040528060318152602001614a2e60319139816000815181106122a0576122a061447c565b60200260200101819052506040518060400160405280601681526020017f686173684465706f7369745472616e73616374696f6e00000000000000000000815250816001815181106122f4576122f461447c565b6020026020010181905250604051806080016040528060428152602001614a5f604291398160028151811061232b5761232b61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156123a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526123ee91908101906144db565b816003815181106124015761240161447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa15801561248a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526124d091908101906144db565b816004815181106124e3576124e361447c565b60209081029190910101526040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e90602401600060405180830381865afa15801561256c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125b291908101906144db565b816005815181106125c5576125c561447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101899052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612639573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261267f91908101906144db565b816006815181106126925761269261447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101889052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015612706573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261274c91908101906144db565b8160078151811061275f5761275f61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260048101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156127d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261281991908101906144db565b8160088151811061282c5761282c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156128a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128ef91908101906144db565b816009815181106129025761290261447c565b60209081029190910101526040517f71aad10d000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906371aad10d9061295d908790600401614346565b600060405180830381865afa15801561297a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129c091908101906144db565b81600a815181106129d3576129d361447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612a319085906004016142c6565b6000604051808303816000875af1158015612a50573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612a969190810190614544565b905080806020019051810190612aac9190614579565b9b9a5050505050505050505050565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561168b578382906000526020600020018054612afe9061474b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2a9061474b565b8015612b775780601f10612b4c57610100808354040283529160200191612b77565b820191906000526020600020905b815481529060010190602001808311612b5a57829003601f168201915b505050505081526020019060010190612adf565b6040805160098082526101408201909252600091829190816020015b6060815260200190600190039081612ba7579050509050604051806060016040528060318152602001614a2e6031913981600081518110612bea57612bea61447c565b60200260200101819052506040518060400160405280601681526020017f6861736843726f7373446f6d61696e4d65737361676500000000000000000000815250816001815181106103965761039661447c565b60008054610100900460ff1615612c5e5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612d995760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091612d03917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161479e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d3b916147e6565b6000604051808303816000865af19150503d8060008114612d78576040519150601f19603f3d011682016040523d82523d6000602084013e612d7d565b606091505b5091505080806020019051810190612d959190614813565b9150505b919050565b60408051600680825260e08201909252600091829190816020015b6060815260200190600190039081612db9579050509050604051806060016040528060318152602001614a2e6031913981600081518110612dfc57612dfc61447c565b60200260200101819052506040518060400160405280601381526020017f686173684f7574707574526f6f7450726f6f660000000000000000000000000081525081600181518110612e5057612e5061447c565b6020908102919091010152612e6486613a77565b81600281518110612e7757612e7761447c565b6020908102919091010152612e8b85613a77565b81600381518110612e9e57612e9e61447c565b6020908102919091010152612eb284613a77565b81600481518110612ec557612ec561447c565b6020908102919091010152612ed983613a77565b81600581518110612eec57612eec61447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790612f4a9085906004016142c6565b6000604051808303816000875af1158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612faf9190810190614544565b905080806020019051810190612fc59190614579565b979650505050505050565b60408051600c8082526101a0820190925260609160009190816020015b6060815260200190600190039081612fed579050509050604051806060016040528060318152602001614a2e60319139816000815181106130305761303061447c565b60200260200101819052506040518060400160405280601881526020017f656e636f64654465706f7369745472616e73616374696f6e0000000000000000815250816001815181106130845761308461447c565b602090810291909101810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906356ca623e906130bb90860186614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015613124573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261316a91908101906144db565b8160028151811061317d5761317d61447c565b60200260200101819052507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166356ca623e8460200160208101906131da9190614830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381865afa158015613243573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328991908101906144db565b8160038151811061329c5761329c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260608401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa158015613313573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261335991908101906144db565b8160048151811061336c5761336c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260808401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261342991908101906144db565b8160058151811061343c5761343c61447c565b60209081029190910101526040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260a08401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156134b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526134f991908101906144db565b8160068151811061350c5761350c61447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d636900a3ae61354160e0860160c0870161484b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381865afa15801561359e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135e491908101906144db565b816007815181106135f7576135f761447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371dce7da61362c6060860160408701614866565b6040518263ffffffff1660e01b815260040161364c911515815260200190565b600060405180830381865afa158015613669573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526136af91908101906144db565b816008815181106136c2576136c261447c565b6020908102919091010152737109709ecfa91a80626ff3989d68f67f5b1dd12d6371aad10d6136f460e0860186614883565b6040518363ffffffff1660e01b81526004016137119291906148ef565b600060405180830381865afa15801561372e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261377491908101906144db565b816009815181106137875761378761447c565b60209081029190910101526040517fb11a19e80000000000000000000000000000000000000000000000000000000081526101008401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b11a19e890602401600060405180830381865afa1580156137ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261384591908101906144db565b81600a815181106138585761385861447c565b60209081029190910101526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526101208401356004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae90602401600060405180830381865afa1580156138d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261391691908101906144db565b81600b815181106139295761392961447c565b60209081029190910101526040517f89160467000000000000000000000000000000000000000000000000000000008152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906139879085906004016142c6565b6000604051808303816000875af11580156139a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526139ec9190810190614544565b905080806020019051810190613a029190614544565b949350505050565b6060600c805480602002602001604051908101604052809291908181526020018280548015610aab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a80575050505050905090565b606081600003613aba57505060408051808201909152600481527f3078303000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613add5780613ace8161496b565b915050600882901c9150613abe565b613a02848260606000613af18360026149a3565b613afc9060026149e0565b67ffffffffffffffff811115613b1457613b14613d54565b6040519080825280601f01601f191660200182016040528015613b3e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613b7557613b7561447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613bd857613bd861447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613c148460026149a3565b613c1f9060016149e0565b90505b6001811115613cbc577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613c6057613c6061447c565b1a60f81b828281518110613c7657613c7661447c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613cb5816149f8565b9050613c22565b508315613d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640160405180910390fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d9957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715613da657613da6613d54565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613df357613df3613d54565b604052919050565b600067ffffffffffffffff821115613e1557613e15613d54565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000613e54613e4f84613dfb565b613dac565b9050828152838383011115613e6857600080fd5b828260208301376000602084830101529392505050565b600082601f830112613e9057600080fd5b613d2983833560208501613e41565b600080600080600080600060e0888a031215613eba57600080fd5b87359650613eca60208901613d30565b9550613ed860408901613d30565b9450606088013593506080880135925060a0880135915060c088013567ffffffffffffffff811115613f0957600080fd5b613f158a828b01613e7f565b91505092959891949750929550565b6020808252825182820181905260009190848201906040850190845b81811015613f7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613f40565b50909695505050505050565b600060208284031215613f9057600080fd5b813567ffffffffffffffff80821115613fa857600080fd5b9083019060e08286031215613fbc57600080fd5b613fc4613d83565b82358152613fd460208401613d30565b6020820152613fe560408401613d30565b6040820152606083013560608201526080830135608082015260a083013560a082015260c08301358281111561401a57600080fd5b61402687828601613e7f565b60c08301525095945050505050565b60005b83811015614050578181015183820152602001614038565b8381111561405f576000848401525b50505050565b6000815180845261407d816020860160208601614035565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156140f75782840389526140e5848351614065565b988501989350908401906001016140cd565b5091979650505050505050565b85815284602082015283604082015282606082015260a060808201526000612fc560a08301846140af565b60006020828403121561414157600080fd5b5035919050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561422f578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b8083101561421a5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906141d8565b50978a01979550505091870191600101614170565b50919998505050505050505050565b60006020828403121561425057600080fd5b813567ffffffffffffffff81111561426757600080fd5b8201601f8101841361427857600080fd5b613a0284823560208401613e41565b8481526080602082015260006142a06080830186614065565b82810360408401526142b28186614065565b90508281036060840152612fc581856140af565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614339577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614327858351614065565b945092850192908501906001016142ed565b5092979650505050505050565b602081526000613d296020830184614065565b803567ffffffffffffffff81168114612d9957600080fd5b600080600080600080600080610100898b03121561438e57600080fd5b61439789613d30565b97506143a560208a01613d30565b96506040890135955060608901359450608089013593506143c860a08a01614359565b925060c089013567ffffffffffffffff8111156143e457600080fd5b6143f08b828c01613e7f565b9250506143ff60e08a01614359565b90509295985092959890939650565b6000806000806080858703121561442457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561445257600080fd5b813567ffffffffffffffff81111561446957600080fd5b82016101408185031215613d2957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144b9613e4f84613dfb565b90508281528383830111156144cd57600080fd5b613d29836020830184614035565b6000602082840312156144ed57600080fd5b815167ffffffffffffffff81111561450457600080fd5b8201601f8101841361451557600080fd5b613a02848251602084016144ab565b600082601f83011261453557600080fd5b613d29838351602085016144ab565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b613a0284828501614524565b60006020828403121561458b57600080fd5b5051919050565b600082601f8301126145a357600080fd5b8151602067ffffffffffffffff808311156145c0576145c0613d54565b8260051b6145cf838201613dac565b93845285810183019383810190888611156145e957600080fd5b84880192505b85831015614625578251848111156146075760008081fd5b6146158a87838c0101614524565b83525091840191908401906145ef565b98975050505050505050565b600080600080600060a0868803121561464957600080fd5b85519450602086015193506040860151925060608601519150608086015167ffffffffffffffff81111561467c57600080fd5b61468888828901614592565b9150509295509295909350565b600080604083850312156146a857600080fd5b505080516020909101519092909150565b600080600080608085870312156146cf57600080fd5b84519350602085015167ffffffffffffffff808211156146ee57600080fd5b6146fa88838901614524565b9450604087015191508082111561471057600080fd5b61471c88838901614524565b9350606087015191508082111561473257600080fd5b5061473f87828801614592565b91505092959194509250565b600181811c9082168061475f57607f821691505b602082108103614798577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516147d8816004850160208701614035565b919091016004019392505050565b600082516147f8818460208701614035565b9190910192915050565b801515811461481057600080fd5b50565b60006020828403121561482557600080fd5b8151613d2981614802565b60006020828403121561484257600080fd5b613d2982613d30565b60006020828403121561485d57600080fd5b613d2982614359565b60006020828403121561487857600080fd5b8135613d2981614802565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148b857600080fd5b83018035915067ffffffffffffffff8211156148d357600080fd5b6020019150368190038213156148e857600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361499c5761499c61493c565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149db576149db61493c565b500290565b600082198211156149f3576149f361493c565b500190565b600081614a0757614a0761493c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe736372697074732f646966666572656e7469616c2d74657374696e672f646966666572656e7469616c2d74657374696e6730783030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303067657450726f76655769746864726177616c5472616e73616374696f6e496e70757473a164736f6c634300080f000aa164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
