{
  "_format": "hh-sol-artifact-1",
  "contractName": "TssDelegationManager",
  "sourceName": "contracts/L1/tss/delegation/TssDelegationManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IDelegation",
          "name": "_delegation",
          "type": "address"
        },
        {
          "internalType": "contract IDelegationSlasher",
          "name": "_delegationSlasher",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "withdrawer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "withdrawalRoot",
          "type": "bytes32"
        }
      ],
      "name": "WithdrawalCompleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "withdrawer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegatedAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "withdrawalRoot",
          "type": "bytes32"
        }
      ],
      "name": "WithdrawalQueued",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEPOSIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REASONABLE_STAKES_UPDATE_PERIOD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WITHDRAWAL_WAITING_PERIOD",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toAddAddresses",
          "type": "address[]"
        }
      ],
      "name": "addToWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IDelegationShare[]",
              "name": "delegations",
              "type": "address[]"
            },
            {
              "internalType": "contract IERC20[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "shares",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "withdrawer",
                  "type": "address"
                },
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                }
              ],
              "internalType": "struct IDelegationManager.WithdrawerAndNonce",
              "name": "withdrawerAndNonce",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "delegatedAddress",
              "type": "address"
            }
          ],
          "internalType": "struct IDelegationManager.QueuedWithdrawal",
          "name": "queuedWithdrawal",
          "type": "tuple"
        }
      ],
      "name": "calculateWithdrawalRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IDelegationShare[]",
              "name": "delegations",
              "type": "address[]"
            },
            {
              "internalType": "contract IERC20[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "shares",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "withdrawer",
                  "type": "address"
                },
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                }
              ],
              "internalType": "struct IDelegationManager.WithdrawerAndNonce",
              "name": "withdrawerAndNonce",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "delegatedAddress",
              "type": "address"
            }
          ],
          "internalType": "struct IDelegationManager.QueuedWithdrawal",
          "name": "queuedWithdrawal",
          "type": "tuple"
        }
      ],
      "name": "canCompleteQueuedWithdrawal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IDelegationShare[]",
              "name": "delegations",
              "type": "address[]"
            },
            {
              "internalType": "contract IERC20[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "shares",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "withdrawer",
                  "type": "address"
                },
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                }
              ],
              "internalType": "struct IDelegationManager.WithdrawerAndNonce",
              "name": "withdrawerAndNonce",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "delegatedAddress",
              "type": "address"
            }
          ],
          "internalType": "struct IDelegationManager.QueuedWithdrawal",
          "name": "queuedWithdrawal",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "receiveAsTokens",
          "type": "bool"
        }
      ],
      "name": "completeQueuedWithdrawal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "contract IDelegationShare[]",
              "name": "delegations",
              "type": "address[]"
            },
            {
              "internalType": "contract IERC20[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "shares",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "withdrawer",
                  "type": "address"
                },
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                }
              ],
              "internalType": "struct IDelegationManager.WithdrawerAndNonce",
              "name": "withdrawerAndNonce",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "delegatedAddress",
              "type": "address"
            }
          ],
          "internalType": "struct IDelegationManager.QueuedWithdrawal",
          "name": "queuedWithdrawal",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "receiveAsTokens",
          "type": "bool"
        }
      ],
      "name": "completeQueuedWithdrawal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delegation",
      "outputs": [
        {
          "internalType": "contract IDelegation",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delegationSlasher",
      "outputs": [
        {
          "internalType": "contract IDelegationSlasher",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IDelegationShare",
          "name": "delegationShare",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "depositInto",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IDelegationShare",
          "name": "delegationShare",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "depositInto",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "contract IDelegationShare",
          "name": "delegationShare",
          "type": "address"
        }
      ],
      "name": "getDelegationShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        }
      ],
      "name": "getDeposits",
      "outputs": [
        {
          "internalType": "contract IDelegationShare[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "getWithdrawNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stakingSlashing",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tssGroupManager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minStakeAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "name": "initializeT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "investorDelegationLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "contract IDelegationShare",
          "name": "",
          "type": "address"
        }
      ],
      "name": "investorDelegationShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "investorDelegations",
      "outputs": [
        {
          "internalType": "contract IDelegationShare",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        },
        {
          "internalType": "contract IDelegationShare",
          "name": "delegationShare",
          "type": "address"
        }
      ],
      "name": "isCanOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minStakeAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "numWithdrawalsQueued",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "delegationIndexes",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IDelegationShare[]",
          "name": "delegationShares",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "shares",
          "type": "uint256[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "withdrawer",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "nonce",
              "type": "uint96"
            }
          ],
          "internalType": "struct IDelegationManager.WithdrawerAndNonce",
          "name": "withdrawerAndNonce",
          "type": "tuple"
        }
      ],
      "name": "queueWithdrawal",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "delegationIndexes",
          "type": "uint256[]"
        },
        {
          "internalType": "contract IDelegationShare[]",
          "name": "delegationShares",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "shares",
          "type": "uint256[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "withdrawer",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "nonce",
              "type": "uint96"
            }
          ],
          "internalType": "struct IDelegationManager.WithdrawerAndNonce",
          "name": "withdrawerAndNonce",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "undelegateIfPossible",
          "type": "bool"
        }
      ],
      "name": "queueWithdrawal",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "queuedWithdrawals",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "initTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "unlockTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "withdrawer",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toRemoveAddresses",
          "type": "address[]"
        }
      ],
      "name": "removeFromWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "setMinStakeAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "setStakingSlash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "setTssGroupManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "contract IDelegationShare[]",
              "name": "delegations",
              "type": "address[]"
            },
            {
              "internalType": "contract IERC20[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "shares",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "withdrawer",
                  "type": "address"
                },
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                }
              ],
              "internalType": "struct IDelegationManager.WithdrawerAndNonce",
              "name": "withdrawerAndNonce",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "delegatedAddress",
              "type": "address"
            }
          ],
          "internalType": "struct IDelegationManager.QueuedWithdrawal",
          "name": "queuedWithdrawal",
          "type": "tuple"
        }
      ],
      "name": "slashQueuedWithdrawal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "slashedAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "contract IDelegationShare[]",
          "name": "delegationShares",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "delegationIndexes",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "shareAmounts",
          "type": "uint256[]"
        }
      ],
      "name": "slashShares",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakingSlash",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "withdrawalRoot",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "stakeInactiveAfter",
          "type": "uint32"
        }
      ],
      "name": "startQueuedWithdrawalWaitingPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "withdrawalRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint32",
          "name": "stakeInactiveAfter",
          "type": "uint32"
        }
      ],
      "name": "startQueuedWithdrawalWaitingPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tssGroupManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "undelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b50604051620063df380380620063df833981016040819052620000349162000143565b6001600160a01b03808316608052811660a05281816200005362000068565b5062000060905062000068565b505062000182565b600054610100900460ff1615620000d55760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000128576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014057600080fd5b50565b600080604083850312156200015757600080fd5b825162000164816200012a565b602084015190925062000177816200012a565b809150509250929050565b60805160a0516161b962000226600039600081816106b801528181610b7e01528181611127015281816119c201528181611f590152818161270501528181612e370152818161347e015261393c01526000818161071801528181610abf015281816114b20152818161157b01528181613bfb01528181613cbf01528181614460015281816145170152818161478501528181614aab0152614dac01526161b96000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c806388fdccf91161019c578063a49b5234116100ee578063d6495d5f11610097578063f188768411610071578063f18876841461074d578063f2fde38b14610756578063fd3eb81f1461076957600080fd5b8063d6495d5f14610700578063df5cf72314610713578063eb4af0451461073a57600080fd5b8063bb580774116100c8578063bb580774146106b3578063c4d66de8146106da578063cf4c8a7b146106ed57600080fd5b8063a49b52341461067a578063a7c373bc1461068d578063b0eeb55e146106a057600080fd5b806394f649dd116101505780639b19251a1161012a5780639b19251a1461060f5780639cb600ba14610632578063a319af611461065d57600080fd5b806394f649dd146105705780639887bd231461059157806399f5371b1461059957600080fd5b80638da5cb5b116101815780638da5cb5b14610544578063905308631461055557806392ab89bb1461056857600080fd5b806388fdccf91461051e5780638941086c1461053157600080fd5b80635350262e11610255578063715018a6116102095780637f649783116101e35780637f649783146104cf578063863111ac146104e25780638885a1ec146104f557600080fd5b8063715018a614610494578063785112021461049c5780637ecebe00146104af57600080fd5b8063566310281161023a57806356631028146104565780635c975abb1461047657806363f1dcce1461048157600080fd5b80635350262e14610420578063548db1741461044357600080fd5b80633644e515116102b757806348825e941161029157806348825e94146103d3578063520381c0146103fa578063529075a51461040d57600080fd5b80633644e5151461038c5780633fd228f514610395578063423b3cf8146103c057600080fd5b80631abeb0d9116102e85780631abeb0d91461033f57806320606b7014610352578063231c7f0d1461037957600080fd5b806305579ccc1461030457806306f1f6841461032a575b600080fd5b610317610312366004615320565b61077c565b6040519081526020015b60405180910390f35b61033d6103383660046153a5565b610832565b005b61031761034d36600461548d565b610b41565b6103177f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103176103873660046157be565b610def565b61031760c95481565b60d1546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b6103a86103ce3660046157f3565b610e3c565b6103177f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f181565b61033d61040836600461548d565b610e74565b61031761041b366004615837565b6110e3565b61043361042e36600461592f565b6118f1565b6040519015158152602001610321565b61033d610451366004615964565b611ae3565b6103176104643660046159a6565b60ce6020526000908152604090205481565b60655460ff16610433565b61033d61048f3660046159d7565b611b77565b61033d611ef5565b61033d6104aa366004615a2e565b611f09565b6103176104bd3660046159a6565b60ca6020526000908152604090205481565b61033d6104dd366004615964565b61261d565b61033d6104f0366004615a75565b6126b5565b6103176105033660046159a6565b6001600160a01b0316600090815260cc602052604090205490565b61031761052c366004615ad9565b612dfc565b61033d61053f366004615b1a565b613027565b6033546001600160a01b03166103a8565b61033d610563366004615b46565b61331b565b61033d613778565b61058361057e3660046159a6565b613781565b604051610321929190615c0a565b610317601e81565b6105e36105a7366004615c38565b60cd6020526000908152604090205463ffffffff808216916401000000008104909116906801000000000000000090046001600160a01b031683565b6040805163ffffffff94851681529390921660208401526001600160a01b031690820152606001610321565b61043361061d3660046159a6565b60cf6020526000908152604090205460ff1681565b610317610640366004615320565b60cb60209081526000928352604080842090915290825290205481565b610665600a81565b60405163ffffffff9091168152602001610321565b610317610688366004615c51565b613901565b61031761069b3660046159a6565b613b1d565b6104336106ae366004615320565b613bc0565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d6106e83660046159a6565b613df7565b60d0546103a8906001600160a01b031681565b61033d61070e3660046159a6565b614016565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d610748366004615c38565b614058565b61031760d25481565b61033d6107643660046159a6565b614065565b61033d6107773660046159a6565b6140f5565b60d0546000906001600160a01b031633146108045760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506001600160a01b03808316600090815260cb60209081526040808320938516835292905220545b92915050565b61083a614137565b60d0546001600160a01b031633146108ba5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561090d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b6002609755600087815b81811015610a8e576109818d88888681811061093557610935615d26565b905060200201358d8d8581811061094e5761094e615d26565b905060200201602081019061096391906159a6565b88888681811061097557610975615d26565b9050602002013561418a565b1561098d578260010192505b8a8a8281811061099f5761099f615d26565b90506020020160208101906109b491906159a6565b6001600160a01b031663d9caed128d8b8b858181106109d5576109d5615d26565b90506020020160208101906109ea91906159a6565b8888868181106109fc576109fc615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050806001019050610917565b506040517f5820491c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635820491c90610afc908f908e908e908a908a90600401615d55565b600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505060016097555050505050505050505050505050565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015260009183917f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015610bc057600080fd5b505afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190615dfd565b15610c915760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415610ce45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038616600090815260cf6020526040902054869060ff16610d535760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016107fb565b60d0546001600160a01b03163314610dd35760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b610ddf848888886142f4565b6001609755979650505050505050565b80516020808301516040808501516060860151608087015160a08801519351600097610e1f979096959101615e1a565b604051602081830303815290604052805190602001209050919050565b60cc6020528160005260406000208181548110610e5857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610e945750600054600160ff909116105b80610eae5750303b158015610eae575060005460ff166001145b610f205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f7e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152504630604051602001610fea9493929190615f4c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060c95561102c826143bb565b60d080546001600160a01b038088167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560d180549287169290911691909117905560d283905580156110dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60006110ed614137565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808d1660048301528c917f00000000000000000000000000000000000000000000000000000000000000009091169063e58398369060240160206040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190615dfd565b1561123c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60d0546001600160a01b031633146112bc5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561130f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038c16600090815260ce6020908152604091829020549161134191908601908601615f85565b6bffffffffffffffffffffffff16146113c25760405162461bcd60e51b815260206004820152603b60248201527f496e766573746d656e744d616e616765722e717565756557697468647261776160448201527f6c3a2070726f7669646564206e6f6e636520696e636f7272656374000000000060648201526084016107fb565b600188146114125760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b600184146114625760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b6001600160a01b03808d16600081815260ce602052604080822080546001019055517f65da12640000000000000000000000000000000000000000000000000000000081526004810192909252917f000000000000000000000000000000000000000000000000000000000000000016906365da12649060240160206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c9190615fa0565b90506115798d8b8b600081811061154557611545615d26565b905060200201602081019061155a91906159a6565b8888600081811061156d5761156d615d26565b90506020020135614425565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635820491c8e8c8c8a8a6040518663ffffffff1660e01b81526004016115cd959493929190615d55565b600060405180830381600087803b1580156115e757600080fd5b505af11580156115fb573d6000803e3d6000fd5b505050506116588d8d8d600081811061161657611616615d26565b905060200201358c8c600081811061163057611630615d26565b905060200201602081019061164591906159a6565b8989600081811061097557610975615d26565b506040805160e060208c02808301820190935260c082018c815260009383928f918f918291908601908490808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b918291850190849080828437600081840152601f19601f8201169050808301925050505050505081526020018f6001600160a01b03168152602001868036038101906117379190615fbd565b8152602001836001600160a01b03168152509050600061175682610def565b90506040518060600160405280601e426117709190616008565b63ffffffff16815260200163ffffffff8016815260200187600001602081019061179a91906159a6565b6001600160a01b031681525060cd600083815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505060008f905060cc6000826001600160a01b03166001600160a01b03168152602001908152602001600020805490506000141561187657611876816149e7565b6001600160a01b03841661188d60208901896159a6565b6001600160a01b0316826001600160a01b03167f4d91ce160b707b07397f4ad8150b1535d0c2c34d7376c0fe7a227fc088ad6214856040516118d191815260200190565b60405180910390a45060016097559e9d5050505050505050505050505050565b60008061190061038784616020565b600081815260cd6020526040902054909150640100000000900463ffffffff166119b85760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e63616e436f6d706c65746551756560448201527f7565645769746864726177616c3a207769746864726177616c20646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107fb565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e58398366119f760e0860160c087016159a6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a869190615dfd565b15611a945750600092915050565b600081815260cd602052604090205463ffffffff640100000000909104811642909116101580611adc57506000611ad160e0850160c086016159a6565b6001600160a01b0316145b9392505050565b611aeb614b03565b60005b81811015611b725760cf6000848484818110611b0c57611b0c615d26565b9050602002016020810190611b2191906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580611b6a8161602c565b915050611aee565b505050565b60d0546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b600083815260cd6020526040902054640100000000900463ffffffff90811614611cd55760405162461bcd60e51b815260206004820152606b60248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205769746864726177616c60648201527f207374616b6520696e61637469766520636c61696d2068617320616c7265616460848201527f79206265656e206d61646500000000000000000000000000000000000000000060a482015260c4016107fb565b600083815260cd60205260409020546001600160a01b03838116680100000000000000009092041614611d965760405162461bcd60e51b815260206004820152605260248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a2053656e6465722069732060648201527f6e6f742074686520776974686472617765720000000000000000000000000000608482015260a4016107fb565b600083815260cd602052604090205463ffffffff164211611e915760405162461bcd60e51b815260206004820152609060248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205374616b65206d61792060648201527f7374696c6c206265207375626a65637420746f20736c617368696e672062617360848201527f6564206f6e206e6577207461736b732e205761697420746f207365742073746160a48201527f6b65496e61637469766541667465722e0000000000000000000000000000000060c482015260e4016107fb565b611ea5611e9f600a42616065565b82614b5d565b600093845260cd6020526040909320805463ffffffff94909416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909416939093179092555050565b611efd614b03565b611f0760006143bb565b565b611f11614137565b611f2160e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015611f9b57600080fd5b505afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd39190615dfd565b1561206c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b600260975414156120bf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560006120d261038785616020565b600081815260cd60209081526040918290208251606081018452905463ffffffff80821683526401000000008204169282018390526801000000000000000090046001600160a01b031692810192909252919250906121bf5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c20646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b806020015163ffffffff164263ffffffff161015806121f6575060006121eb60e0870160c088016159a6565b6001600160a01b0316145b6122da5760405162461bcd60e51b815260206004820152608e60248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c2077616974696e67207060648201527f6572696f6420686173206e6f74207965742070617373656420616e642064657060848201527f6f7369746f72207761732064656c656761746564207768656e2077697468647260a48201527f6177616c20696e6974696174656400000000000000000000000000000000000060c482015260e4016107fb565b6122ea60a08601608087016159a6565b6001600160a01b0316336001600160a01b0316146123bc5760405162461bcd60e51b815260206004820152606660248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a206f6e6c792073706563696669656420776974686460648201527f72617765722063616e20636f6d706c657465206120717565756564207769746860848201527f64726177616c000000000000000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd6020526040812080547fffffffff000000000000000000000000000000000000000000000000000000001690556123fa868061608d565b915050841561253a5760005b8181101561253457612418878061608d565b8281811061242857612428615d26565b905060200201602081019061243d91906159a6565b6001600160a01b031663d9caed128460400151898060200190612460919061608d565b8581811061247057612470615d26565b905060200201602081019061248591906159a6565b61249260408c018c61608d565b868181106124a2576124a2615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561251157600080fd5b505af1158015612525573d6000803e3d6000fd5b50505050806001019050612406565b506125b0565b60005b818110156125ae5760408301516125a690612558898061608d565b8481811061256857612568615d26565b905060200201602081019061257d91906159a6565b61258a60408b018b61608d565b8581811061259a5761259a615d26565b90506020020135614b7f565b60010161253d565b505b60408201516001600160a01b03166125ce60808801606089016159a6565b6001600160a01b03167f68c822b7070b88d8b19e597c8468af2178f99568172a673cff038bd572932d9f8560405161260891815260200190565b60405180910390a35050600160975550505050565b612625614b03565b60005b81811015611b7257600160cf600085858581811061264857612648615d26565b905060200201602081019061265d91906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806126ad8161602c565b915050612628565b6126bd614137565b6126cd60e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b15801561274757600080fd5b505afa15801561275b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277f9190615dfd565b156128185760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b6002609754141561286b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560d0546001600160a01b031633146128f05760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b60006128fe61038785616020565b600081815260cd60209081526040918290208251606081018452905463ffffffff80821683526401000000008204169282018390526801000000000000000090046001600160a01b031692810192909252919250906129eb5760405162461bcd60e51b815260206004820152604560248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c20646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b806020015163ffffffff164263ffffffff16101580612a2257506000612a1760e0870160c088016159a6565b6001600160a01b0316145b612b065760405162461bcd60e51b815260206004820152608e60248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c2077616974696e67207060648201527f6572696f6420686173206e6f74207965742070617373656420616e642064657060848201527f6f7369746f72207761732064656c656761746564207768656e2077697468647260a48201527f6177616c20696e6974696174656400000000000000000000000000000000000060c482015260e4016107fb565b612b1660a08601608087016159a6565b6001600160a01b0316866001600160a01b031614612be85760405162461bcd60e51b815260206004820152606660248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a206f6e6c792073706563696669656420776974686460648201527f72617765722063616e20636f6d706c657465206120717565756564207769746860848201527f64726177616c000000000000000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd6020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000169055612c26868061608d565b9150508415612d665760005b81811015612d6057612c44878061608d565b82818110612c5457612c54615d26565b9050602002016020810190612c6991906159a6565b6001600160a01b031663d9caed128460400151898060200190612c8c919061608d565b85818110612c9c57612c9c615d26565b9050602002016020810190612cb191906159a6565b612cbe60408c018c61608d565b86818110612cce57612cce615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015612d3d57600080fd5b505af1158015612d51573d6000803e3d6000fd5b50505050806001019050612c32565b50612d8e565b60005b81811015612d8c576040830151612d8490612558898061608d565b600101612d69565b505b60408201516001600160a01b0316612dac60808801606089016159a6565b6001600160a01b03167f68c822b7070b88d8b19e597c8468af2178f99568172a673cff038bd572932d9f85604051612de691815260200190565b60405180910390a3505060016097555050505050565b6040517fe583983600000000000000000000000000000000000000000000000000000000815233600482018190526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb19190615dfd565b15612f4a5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415612f9d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038516600090815260cf6020526040902054859060ff1661300c5760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016107fb565b613018338787876142f4565b60016097559695505050505050565b600082815260cd6020526040902054640100000000900463ffffffff908116146131055760405162461bcd60e51b815260206004820152606b60248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205769746864726177616c60648201527f207374616b6520696e61637469766520636c61696d2068617320616c7265616460848201527f79206265656e206d61646500000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd60205260409020546801000000000000000090046001600160a01b031633146131c35760405162461bcd60e51b815260206004820152605260248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a2053656e6465722069732060648201527f6e6f742074686520776974686472617765720000000000000000000000000000608482015260a4016107fb565b600082815260cd602052604090205463ffffffff1642116132be5760405162461bcd60e51b815260206004820152609060248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205374616b65206d61792060648201527f7374696c6c206265207375626a65637420746f20736c617368696e672062617360848201527f6564206f6e206e6577207461736b732e205761697420746f207365742073746160a48201527f6b65496e61637469766541667465722e0000000000000000000000000000000060c482015260e4016107fb565b6132cc611e9f600a42616065565b600092835260cd6020526040909220805463ffffffff93909316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9093169290921790915550565b613323614137565b61332b614b03565b6002609754141561337e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b6002609755600061339161038783616020565b600081815260cd6020526040902054909150640100000000900463ffffffff166134495760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e736c61736851756575656457697460448201527f6864726177616c3a207769746864726177616c20646f6573206e6f742065786960648201527f7374000000000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b600081815260cd60205260409020546801000000000000000090046001600160a01b0316158061354257506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e58398366134b360808501606086016159a6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561350a57600080fd5b505afa15801561351e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135429190615dfd565b6136005760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e736c61736851756575656457697460448201527f6864726177616c3a207769746864726177616c20686173206e6f74206265656e60648201527f207375636365737366756c6c79206368616c6c656e676564206f72206465706f60848201527f7369746f72206973206e6f742066726f7a656e0000000000000000000000000060a482015260c4016107fb565b600081815260cd6020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016905561363e838061608d565b9050905060005b8181101561376c57613657848061608d565b8281811061366757613667615d26565b905060200201602081019061367c91906159a6565b6001600160a01b031663d9caed1286613698602088018861608d565b858181106136a8576136a8615d26565b90506020020160208101906136bd91906159a6565b6136ca604089018961608d565b868181106136da576136da615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561374957600080fd5b505af115801561375d573d6000803e3d6000fd5b50505050806001019050613645565b50506001609755505050565b611f07336149e7565b6001600160a01b038116600090815260cc60205260408120546060918291908167ffffffffffffffff8111156137b9576137b96154e0565b6040519080825280602002602001820160405280156137e2578160200160208202803683370190505b50905060005b82811015613873576001600160a01b038616600090815260cb6020908152604080832060cc909252822080549192918490811061382757613827615d26565b60009182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061386057613860615d26565b60209081029190910101526001016137e8565b5060cc6000866001600160a01b03166001600160a01b0316815260200190815260200160002081818054806020026020016040519081016040528092919081815260200182805480156138ef57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116138d1575b50505050509150935093505050915091565b600061390b614137565b6040517fe58398360000000000000000000000000000000000000000000000000000000081523360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e58398369060240160206040518083038186803b15801561398657600080fd5b505afa15801561399a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139be9190615dfd565b15613a575760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415613aaa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560405162461bcd60e51b815260206004820152603260248201527f54737344656c65676174696f6e4d616e616765723a207175657565576974686460448201527f726177616c2069732064697361626c656420000000000000000000000000000060648201526084016107fb565b60d0546000906001600160a01b03163314613ba05760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b506001600160a01b038116600090815260ce60205260409020545b919050565b6040517f6d70f7ae0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636d70f7ae9060240160206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c779190615dfd565b15613dee576040517f778e55f30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063778e55f39060440160206040518083038186803b158015613d0357600080fd5b505afa158015613d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3b91906160f5565b6040517ff3e73875000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b0385169063f3e7387590602401602060405180830381600087803b158015613d9c57600080fd5b505af1158015613db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd491906160f5565b905060d254811115613deb5760019250505061082c565b50505b50600092915050565b600054610100900460ff1615808015613e175750600054600160ff909116105b80613e315750303b158015613e31575060005460ff166001145b613ea35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015613f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152504630604051602001613f6d9493929190615f4c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060c955613faf826143bb565b801561401257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61401e614b03565b60d180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b614060614b03565b60d255565b61406d614b03565b6001600160a01b0381166140e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107fb565b6140f2816143bb565b50565b6140fd614b03565b60d080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60655460ff1615611f075760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107fb565b600081614201576040805162461bcd60e51b81526020600482015260248101919091527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265733a60448201527f207368617265416d6f756e742073686f756c64206e6f74206265207a65726f2160648201526084016107fb565b6001600160a01b03808616600090815260cb60209081526040808320938716835292905220548083111561429d5760405162461bcd60e51b815260206004820152603560248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265733a60448201527f207368617265416d6f756e7420746f6f2068696768000000000000000000000060648201526084016107fb565b6001600160a01b03808716600090815260cb6020908152604080832093881683529290522083820390819055908314156142e6576142dc868686614e0d565b60019150506142ec565b60009150505b949350505050565b600061430b6001600160a01b03841686868561509f565b6040517f8340f5490000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152848116602483015260448201849052851690638340f54990606401602060405180830381600087803b15801561437657600080fd5b505af115801561438a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ae91906160f5565b90506142ec858583614b7f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f65da12640000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906365da12649060240160206040518083038186803b1580156144a457600080fd5b505afa1580156144b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144dc9190615fa0565b6040517f3e28391d0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690633e28391d9060240160206040518083038186803b15801561455b57600080fd5b505afa15801561456f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145939190615dfd565b156149e15760d1546040517fb57388d30000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063b57388d390602401602060405180830381600087803b1580156145f857600080fd5b505af115801561460c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146309190615dfd565b156149e15760d0546040517f14bfb5270000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906314bfb52790602401602060405180830381600087803b15801561469557600080fd5b505af11580156146a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146cd9190615dfd565b156147405760405162461bcd60e51b815260206004820152602260248201527f746865206f70657261746f72206973206e6f7420696e206a61696c207374617460448201527f757300000000000000000000000000000000000000000000000000000000000060648201526084016107fb565b6040517f778e55f30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152848116602483015260009184917f0000000000000000000000000000000000000000000000000000000000000000169063778e55f39060440160206040518083038186803b1580156147c757600080fd5b505afa1580156147db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ff91906160f5565b614809919061610e565b6040517ff3e73875000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b0386169063f3e7387590602401602060405180830381600087803b15801561486a57600080fd5b505af115801561487e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a291906160f5565b60d1546040517f68fe7d230000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529293509116906368fe7d2390602401602060405180830381600087803b15801561490457600080fd5b505af1158015614918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493c9190615dfd565b156149de5760d25481116149de5760405162461bcd60e51b815260206004820152604b60248201527f756e61626c652077697468647261772064756520746f206f70657261746f722760448201527f7320726573742073686172657320736d616c6c6572207468616e206d696e692060648201527f726571756972656d656e74000000000000000000000000000000000000000000608482015260a4016107fb565b50505b50505050565b6001600160a01b038116600090815260cc602052604090205415614a735760405162461bcd60e51b815260206004820152603c60248201527f496e766573746d656e744d616e616765722e5f756e64656c65676174653a206460448201527f65706f7369746f722068617320616374697665206465706f736974730000000060648201526084016107fb565b6040517fda8be8640000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063da8be86490602401600060405180830381600087803b158015614aef57600080fd5b505af11580156110dc573d6000803e3d6000fd5b6033546001600160a01b03163314611f075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107fb565b60008163ffffffff168363ffffffff1611614b785781611adc565b5090919050565b80614bf25760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e5f6164645368617265733a20736860448201527f617265732073686f756c64206e6f74206265207a65726f21000000000000000060648201526084016107fb565b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054614d29576001600160a01b038316600090815260cc60209081526040909120541115614cd25760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e5f6164645368617265733a20646560448201527f706f73697420776f756c6420657863656564204d41585f494e564553544f525f60648201527f44454c45474154494f4e5f4c454e475448000000000000000000000000000000608482015260a4016107fb565b6001600160a01b03838116600090815260cc602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b6001600160a01b03808416600090815260cb6020908152604080832093861683529290529081208054839290614d60908490616008565b90915550506040517f28a573ae0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b158015614df057600080fd5b505af1158015614e04573d6000803e3d6000fd5b50505050505050565b6001600160a01b03838116600090815260cc6020526040902080549183169184908110614e3c57614e3c615d26565b6000918252602090912001546001600160a01b03161415614efd576001600160a01b038316600090815260cc602052604090208054614e7d9060019061610e565b81548110614e8d57614e8d615d26565b60009182526020808320909101546001600160a01b03868116845260cc9092526040909220805491909216919084908110614eca57614eca615d26565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061501b565b6001600160a01b038316600090815260cc6020526040812054905b81811015615018576001600160a01b03858116600090815260cc6020526040902080549185169183908110614f4f57614f4f615d26565b6000918252602090912001546001600160a01b03161415615010576001600160a01b038516600090815260cc602052604090208054614f909060019061610e565b81548110614fa057614fa0615d26565b60009182526020808320909101546001600160a01b03888116845260cc9092526040909220805491909216919083908110614fdd57614fdd615d26565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550615018565b600101614f18565b50505b6001600160a01b038316600090815260cc6020526040902080548061504257615042616125565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526149e1928792916000916151659185169084906151f5565b805190915015611b7257808060200190518101906151839190615dfd565b611b725760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107fb565b60606142ec848460008585843b61524e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107fb565b600080866001600160a01b0316858760405161526a9190616154565b60006040518083038185875af1925050503d80600081146152a7576040519150601f19603f3d011682016040523d82523d6000602084013e6152ac565b606091505b50915091506152bc8282866152c7565b979650505050505050565b606083156152d6575081611adc565b8251156152e65782518084602001fd5b8160405162461bcd60e51b81526004016107fb9190616170565b6001600160a01b03811681146140f257600080fd5b8035613bbb81615300565b6000806040838503121561533357600080fd5b823561533e81615300565b9150602083013561534e81615300565b809150509250929050565b60008083601f84011261536b57600080fd5b50813567ffffffffffffffff81111561538357600080fd5b6020830191508360208260051b850101111561539e57600080fd5b9250929050565b60008060008060008060008060008060c08b8d0312156153c457600080fd5b6153cd8b615315565b99506153db60208c01615315565b985060408b013567ffffffffffffffff808211156153f857600080fd5b6154048e838f01615359565b909a50985060608d013591508082111561541d57600080fd5b6154298e838f01615359565b909850965060808d013591508082111561544257600080fd5b61544e8e838f01615359565b909650945060a08d013591508082111561546757600080fd5b506154748d828e01615359565b915080935050809150509295989b9194979a5092959850565b600080600080608085870312156154a357600080fd5b84356154ae81615300565b935060208501356154be81615300565b92506040850135915060608501356154d581615300565b939692955090935050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715615532576155326154e0565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561557f5761557f6154e0565b604052919050565b600067ffffffffffffffff8211156155a1576155a16154e0565b5060051b60200190565b600082601f8301126155bc57600080fd5b813560206155d16155cc83615587565b615538565b82815260059290921b840181019181810190868411156155f057600080fd5b8286015b8481101561561457803561560781615300565b83529183019183016155f4565b509695505050505050565b600082601f83011261563057600080fd5b813560206156406155cc83615587565b82815260059290921b8401810191818101908684111561565f57600080fd5b8286015b848110156156145780358352918301918301615663565b80356bffffffffffffffffffffffff81168114613bbb57600080fd5b6000604082840312156156a857600080fd5b6040516040810181811067ffffffffffffffff821117156156cb576156cb6154e0565b60405290508082356156dc81615300565b81526156ea6020840161567a565b60208201525092915050565b600060e0828403121561570857600080fd5b61571061550f565b9050813567ffffffffffffffff8082111561572a57600080fd5b615736858386016155ab565b8352602084013591508082111561574c57600080fd5b615758858386016155ab565b6020840152604084013591508082111561577157600080fd5b5061577e8482850161561f565b60408301525061579060608301615315565b60608201526157a28360808401615696565b60808201526157b360c08301615315565b60a082015292915050565b6000602082840312156157d057600080fd5b813567ffffffffffffffff8111156157e757600080fd5b6142ec848285016156f6565b6000806040838503121561580657600080fd5b823561581181615300565b946020939093013593505050565b60006040828403121561583157600080fd5b50919050565b60008060008060008060008060008060e08b8d03121561585657600080fd5b61585f8b615315565b995060208b013567ffffffffffffffff8082111561587c57600080fd5b6158888e838f01615359565b909b50995060408d01359150808211156158a157600080fd5b6158ad8e838f01615359565b909950975060608d01359150808211156158c657600080fd5b6158d28e838f01615359565b909750955060808d01359150808211156158eb57600080fd5b506158f88d828e01615359565b909450925061590c90508c60a08d0161581f565b90509295989b9194979a5092959850565b600060e0828403121561583157600080fd5b60006020828403121561594157600080fd5b813567ffffffffffffffff81111561595857600080fd5b6142ec8482850161591d565b6000806020838503121561597757600080fd5b823567ffffffffffffffff81111561598e57600080fd5b61599a85828601615359565b90969095509350505050565b6000602082840312156159b857600080fd5b8135611adc81615300565b803563ffffffff81168114613bbb57600080fd5b6000806000606084860312156159ec57600080fd5b8335925060208401356159fe81615300565b9150615a0c604085016159c3565b90509250925092565b80151581146140f257600080fd5b8035613bbb81615a15565b60008060408385031215615a4157600080fd5b823567ffffffffffffffff811115615a5857600080fd5b615a648582860161591d565b925050602083013561534e81615a15565b600080600060608486031215615a8a57600080fd5b8335615a9581615300565b9250602084013567ffffffffffffffff811115615ab157600080fd5b615abd8682870161591d565b9250506040840135615ace81615a15565b809150509250925092565b600080600060608486031215615aee57600080fd5b8335615af981615300565b92506020840135615b0981615300565b929592945050506040919091013590565b60008060408385031215615b2d57600080fd5b82359150615b3d602084016159c3565b90509250929050565b60008060408385031215615b5957600080fd5b8235615b6481615300565b9150602083013567ffffffffffffffff811115615b8057600080fd5b615b8c8582860161591d565b9150509250929050565b600081518084526020808501945080840160005b83811015615bcf5781516001600160a01b031687529582019590820190600101615baa565b509495945050505050565b600081518084526020808501945080840160005b83811015615bcf57815187529582019590820190600101615bee565b604081526000615c1d6040830185615b96565b8281036020840152615c2f8185615bda565b95945050505050565b600060208284031215615c4a57600080fd5b5035919050565b60008060008060008060008060008060e08b8d031215615c7057600080fd5b8a3567ffffffffffffffff80821115615c8857600080fd5b615c948e838f01615359565b909c509a5060208d0135915080821115615cad57600080fd5b615cb98e838f01615359565b909a50985060408d0135915080821115615cd257600080fd5b615cde8e838f01615359565b909850965060608d0135915080821115615cf757600080fd5b50615d048d828e01615359565b9095509350615d1890508c60808d0161581f565b915061590c60c08c01615a23565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b03868116825260606020808401829052908301869052600091879160808501845b89811015615da4578435615d9081615300565b841682529382019390820190600101615d7d565b5085810360408701528681527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871115615ddd57600080fd5b8660051b9350838883830137600093010191825250979650505050505050565b600060208284031215615e0f57600080fd5b8151611adc81615a15565b60e081526000615e2d60e0830189615b96565b82810360208481019190915288518083528982019282019060005b81811015615e6d5784516001600160a01b031683529383019391830191600101615e48565b50508481036040860152615e81818a615bda565b6001600160a01b038981166060880152885116608087015260208801516bffffffffffffffffffffffff1660a08701529350615ebc92505050565b6001600160a01b03831660c0830152979650505050505050565b60005b83811015615ef1578181015183820152602001615ed9565b838111156149e15750506000910152565b60008151808452615f1a816020860160208601615ed6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b848152608060208201526000615f656080830186615f02565b90508360408301526001600160a01b038316606083015295945050505050565b600060208284031215615f9757600080fd5b611adc8261567a565b600060208284031215615fb257600080fd5b8151611adc81615300565b600060408284031215615fcf57600080fd5b611adc8383615696565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561601b5761601b615fd9565b500190565b600061082c36836156f6565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561605e5761605e615fd9565b5060010190565b600063ffffffff80831681851680830382111561608457616084615fd9565b01949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126160c257600080fd5b83018035915067ffffffffffffffff8211156160dd57600080fd5b6020019150600581901b360382131561539e57600080fd5b60006020828403121561610757600080fd5b5051919050565b60008282101561612057616120615fd9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251616166818460208701615ed6565b9190910192915050565b602081526000611adc6020830184615f0256fea26469706673582212204626461268ab971a8e03a675cfce0e82477c6334c799cc358aca89841c0e4e2264736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ff5760003560e01c806388fdccf91161019c578063a49b5234116100ee578063d6495d5f11610097578063f188768411610071578063f18876841461074d578063f2fde38b14610756578063fd3eb81f1461076957600080fd5b8063d6495d5f14610700578063df5cf72314610713578063eb4af0451461073a57600080fd5b8063bb580774116100c8578063bb580774146106b3578063c4d66de8146106da578063cf4c8a7b146106ed57600080fd5b8063a49b52341461067a578063a7c373bc1461068d578063b0eeb55e146106a057600080fd5b806394f649dd116101505780639b19251a1161012a5780639b19251a1461060f5780639cb600ba14610632578063a319af611461065d57600080fd5b806394f649dd146105705780639887bd231461059157806399f5371b1461059957600080fd5b80638da5cb5b116101815780638da5cb5b14610544578063905308631461055557806392ab89bb1461056857600080fd5b806388fdccf91461051e5780638941086c1461053157600080fd5b80635350262e11610255578063715018a6116102095780637f649783116101e35780637f649783146104cf578063863111ac146104e25780638885a1ec146104f557600080fd5b8063715018a614610494578063785112021461049c5780637ecebe00146104af57600080fd5b8063566310281161023a57806356631028146104565780635c975abb1461047657806363f1dcce1461048157600080fd5b80635350262e14610420578063548db1741461044357600080fd5b80633644e515116102b757806348825e941161029157806348825e94146103d3578063520381c0146103fa578063529075a51461040d57600080fd5b80633644e5151461038c5780633fd228f514610395578063423b3cf8146103c057600080fd5b80631abeb0d9116102e85780631abeb0d91461033f57806320606b7014610352578063231c7f0d1461037957600080fd5b806305579ccc1461030457806306f1f6841461032a575b600080fd5b610317610312366004615320565b61077c565b6040519081526020015b60405180910390f35b61033d6103383660046153a5565b610832565b005b61031761034d36600461548d565b610b41565b6103177f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103176103873660046157be565b610def565b61031760c95481565b60d1546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b6103a86103ce3660046157f3565b610e3c565b6103177f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f181565b61033d61040836600461548d565b610e74565b61031761041b366004615837565b6110e3565b61043361042e36600461592f565b6118f1565b6040519015158152602001610321565b61033d610451366004615964565b611ae3565b6103176104643660046159a6565b60ce6020526000908152604090205481565b60655460ff16610433565b61033d61048f3660046159d7565b611b77565b61033d611ef5565b61033d6104aa366004615a2e565b611f09565b6103176104bd3660046159a6565b60ca6020526000908152604090205481565b61033d6104dd366004615964565b61261d565b61033d6104f0366004615a75565b6126b5565b6103176105033660046159a6565b6001600160a01b0316600090815260cc602052604090205490565b61031761052c366004615ad9565b612dfc565b61033d61053f366004615b1a565b613027565b6033546001600160a01b03166103a8565b61033d610563366004615b46565b61331b565b61033d613778565b61058361057e3660046159a6565b613781565b604051610321929190615c0a565b610317601e81565b6105e36105a7366004615c38565b60cd6020526000908152604090205463ffffffff808216916401000000008104909116906801000000000000000090046001600160a01b031683565b6040805163ffffffff94851681529390921660208401526001600160a01b031690820152606001610321565b61043361061d3660046159a6565b60cf6020526000908152604090205460ff1681565b610317610640366004615320565b60cb60209081526000928352604080842090915290825290205481565b610665600a81565b60405163ffffffff9091168152602001610321565b610317610688366004615c51565b613901565b61031761069b3660046159a6565b613b1d565b6104336106ae366004615320565b613bc0565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d6106e83660046159a6565b613df7565b60d0546103a8906001600160a01b031681565b61033d61070e3660046159a6565b614016565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d610748366004615c38565b614058565b61031760d25481565b61033d6107643660046159a6565b614065565b61033d6107773660046159a6565b6140f5565b60d0546000906001600160a01b031633146108045760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506001600160a01b03808316600090815260cb60209081526040808320938516835292905220545b92915050565b61083a614137565b60d0546001600160a01b031633146108ba5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561090d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b6002609755600087815b81811015610a8e576109818d88888681811061093557610935615d26565b905060200201358d8d8581811061094e5761094e615d26565b905060200201602081019061096391906159a6565b88888681811061097557610975615d26565b9050602002013561418a565b1561098d578260010192505b8a8a8281811061099f5761099f615d26565b90506020020160208101906109b491906159a6565b6001600160a01b031663d9caed128d8b8b858181106109d5576109d5615d26565b90506020020160208101906109ea91906159a6565b8888868181106109fc576109fc615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050806001019050610917565b506040517f5820491c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635820491c90610afc908f908e908e908a908a90600401615d55565b600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505060016097555050505050505050505050505050565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015260009183917f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015610bc057600080fd5b505afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190615dfd565b15610c915760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415610ce45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038616600090815260cf6020526040902054869060ff16610d535760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016107fb565b60d0546001600160a01b03163314610dd35760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b610ddf848888886142f4565b6001609755979650505050505050565b80516020808301516040808501516060860151608087015160a08801519351600097610e1f979096959101615e1a565b604051602081830303815290604052805190602001209050919050565b60cc6020528160005260406000208181548110610e5857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610e945750600054600160ff909116105b80610eae5750303b158015610eae575060005460ff166001145b610f205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f7e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152504630604051602001610fea9493929190615f4c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060c95561102c826143bb565b60d080546001600160a01b038088167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560d180549287169290911691909117905560d283905580156110dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60006110ed614137565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808d1660048301528c917f00000000000000000000000000000000000000000000000000000000000000009091169063e58398369060240160206040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190615dfd565b1561123c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60d0546001600160a01b031633146112bc5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561130f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038c16600090815260ce6020908152604091829020549161134191908601908601615f85565b6bffffffffffffffffffffffff16146113c25760405162461bcd60e51b815260206004820152603b60248201527f496e766573746d656e744d616e616765722e717565756557697468647261776160448201527f6c3a2070726f7669646564206e6f6e636520696e636f7272656374000000000060648201526084016107fb565b600188146114125760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b600184146114625760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b6001600160a01b03808d16600081815260ce602052604080822080546001019055517f65da12640000000000000000000000000000000000000000000000000000000081526004810192909252917f000000000000000000000000000000000000000000000000000000000000000016906365da12649060240160206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c9190615fa0565b90506115798d8b8b600081811061154557611545615d26565b905060200201602081019061155a91906159a6565b8888600081811061156d5761156d615d26565b90506020020135614425565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635820491c8e8c8c8a8a6040518663ffffffff1660e01b81526004016115cd959493929190615d55565b600060405180830381600087803b1580156115e757600080fd5b505af11580156115fb573d6000803e3d6000fd5b505050506116588d8d8d600081811061161657611616615d26565b905060200201358c8c600081811061163057611630615d26565b905060200201602081019061164591906159a6565b8989600081811061097557610975615d26565b506040805160e060208c02808301820190935260c082018c815260009383928f918f918291908601908490808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b918291850190849080828437600081840152601f19601f8201169050808301925050505050505081526020018f6001600160a01b03168152602001868036038101906117379190615fbd565b8152602001836001600160a01b03168152509050600061175682610def565b90506040518060600160405280601e426117709190616008565b63ffffffff16815260200163ffffffff8016815260200187600001602081019061179a91906159a6565b6001600160a01b031681525060cd600083815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505060008f905060cc6000826001600160a01b03166001600160a01b03168152602001908152602001600020805490506000141561187657611876816149e7565b6001600160a01b03841661188d60208901896159a6565b6001600160a01b0316826001600160a01b03167f4d91ce160b707b07397f4ad8150b1535d0c2c34d7376c0fe7a227fc088ad6214856040516118d191815260200190565b60405180910390a45060016097559e9d5050505050505050505050505050565b60008061190061038784616020565b600081815260cd6020526040902054909150640100000000900463ffffffff166119b85760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e63616e436f6d706c65746551756560448201527f7565645769746864726177616c3a207769746864726177616c20646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107fb565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e58398366119f760e0860160c087016159a6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a869190615dfd565b15611a945750600092915050565b600081815260cd602052604090205463ffffffff640100000000909104811642909116101580611adc57506000611ad160e0850160c086016159a6565b6001600160a01b0316145b9392505050565b611aeb614b03565b60005b81811015611b725760cf6000848484818110611b0c57611b0c615d26565b9050602002016020810190611b2191906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580611b6a8161602c565b915050611aee565b505050565b60d0546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b600083815260cd6020526040902054640100000000900463ffffffff90811614611cd55760405162461bcd60e51b815260206004820152606b60248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205769746864726177616c60648201527f207374616b6520696e61637469766520636c61696d2068617320616c7265616460848201527f79206265656e206d61646500000000000000000000000000000000000000000060a482015260c4016107fb565b600083815260cd60205260409020546001600160a01b03838116680100000000000000009092041614611d965760405162461bcd60e51b815260206004820152605260248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a2053656e6465722069732060648201527f6e6f742074686520776974686472617765720000000000000000000000000000608482015260a4016107fb565b600083815260cd602052604090205463ffffffff164211611e915760405162461bcd60e51b815260206004820152609060248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205374616b65206d61792060648201527f7374696c6c206265207375626a65637420746f20736c617368696e672062617360848201527f6564206f6e206e6577207461736b732e205761697420746f207365742073746160a48201527f6b65496e61637469766541667465722e0000000000000000000000000000000060c482015260e4016107fb565b611ea5611e9f600a42616065565b82614b5d565b600093845260cd6020526040909320805463ffffffff94909416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909416939093179092555050565b611efd614b03565b611f0760006143bb565b565b611f11614137565b611f2160e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015611f9b57600080fd5b505afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd39190615dfd565b1561206c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b600260975414156120bf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560006120d261038785616020565b600081815260cd60209081526040918290208251606081018452905463ffffffff80821683526401000000008204169282018390526801000000000000000090046001600160a01b031692810192909252919250906121bf5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c20646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b806020015163ffffffff164263ffffffff161015806121f6575060006121eb60e0870160c088016159a6565b6001600160a01b0316145b6122da5760405162461bcd60e51b815260206004820152608e60248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c2077616974696e67207060648201527f6572696f6420686173206e6f74207965742070617373656420616e642064657060848201527f6f7369746f72207761732064656c656761746564207768656e2077697468647260a48201527f6177616c20696e6974696174656400000000000000000000000000000000000060c482015260e4016107fb565b6122ea60a08601608087016159a6565b6001600160a01b0316336001600160a01b0316146123bc5760405162461bcd60e51b815260206004820152606660248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a206f6e6c792073706563696669656420776974686460648201527f72617765722063616e20636f6d706c657465206120717565756564207769746860848201527f64726177616c000000000000000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd6020526040812080547fffffffff000000000000000000000000000000000000000000000000000000001690556123fa868061608d565b915050841561253a5760005b8181101561253457612418878061608d565b8281811061242857612428615d26565b905060200201602081019061243d91906159a6565b6001600160a01b031663d9caed128460400151898060200190612460919061608d565b8581811061247057612470615d26565b905060200201602081019061248591906159a6565b61249260408c018c61608d565b868181106124a2576124a2615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561251157600080fd5b505af1158015612525573d6000803e3d6000fd5b50505050806001019050612406565b506125b0565b60005b818110156125ae5760408301516125a690612558898061608d565b8481811061256857612568615d26565b905060200201602081019061257d91906159a6565b61258a60408b018b61608d565b8581811061259a5761259a615d26565b90506020020135614b7f565b60010161253d565b505b60408201516001600160a01b03166125ce60808801606089016159a6565b6001600160a01b03167f68c822b7070b88d8b19e597c8468af2178f99568172a673cff038bd572932d9f8560405161260891815260200190565b60405180910390a35050600160975550505050565b612625614b03565b60005b81811015611b7257600160cf600085858581811061264857612648615d26565b905060200201602081019061265d91906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806126ad8161602c565b915050612628565b6126bd614137565b6126cd60e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b15801561274757600080fd5b505afa15801561275b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277f9190615dfd565b156128185760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b6002609754141561286b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560d0546001600160a01b031633146128f05760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b60006128fe61038785616020565b600081815260cd60209081526040918290208251606081018452905463ffffffff80821683526401000000008204169282018390526801000000000000000090046001600160a01b031692810192909252919250906129eb5760405162461bcd60e51b815260206004820152604560248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c20646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b806020015163ffffffff164263ffffffff16101580612a2257506000612a1760e0870160c088016159a6565b6001600160a01b0316145b612b065760405162461bcd60e51b815260206004820152608e60248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c2077616974696e67207060648201527f6572696f6420686173206e6f74207965742070617373656420616e642064657060848201527f6f7369746f72207761732064656c656761746564207768656e2077697468647260a48201527f6177616c20696e6974696174656400000000000000000000000000000000000060c482015260e4016107fb565b612b1660a08601608087016159a6565b6001600160a01b0316866001600160a01b031614612be85760405162461bcd60e51b815260206004820152606660248201527f496e766573746d656e744d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a206f6e6c792073706563696669656420776974686460648201527f72617765722063616e20636f6d706c657465206120717565756564207769746860848201527f64726177616c000000000000000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd6020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000169055612c26868061608d565b9150508415612d665760005b81811015612d6057612c44878061608d565b82818110612c5457612c54615d26565b9050602002016020810190612c6991906159a6565b6001600160a01b031663d9caed128460400151898060200190612c8c919061608d565b85818110612c9c57612c9c615d26565b9050602002016020810190612cb191906159a6565b612cbe60408c018c61608d565b86818110612cce57612cce615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015612d3d57600080fd5b505af1158015612d51573d6000803e3d6000fd5b50505050806001019050612c32565b50612d8e565b60005b81811015612d8c576040830151612d8490612558898061608d565b600101612d69565b505b60408201516001600160a01b0316612dac60808801606089016159a6565b6001600160a01b03167f68c822b7070b88d8b19e597c8468af2178f99568172a673cff038bd572932d9f85604051612de691815260200190565b60405180910390a3505060016097555050505050565b6040517fe583983600000000000000000000000000000000000000000000000000000000815233600482018190526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb19190615dfd565b15612f4a5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415612f9d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038516600090815260cf6020526040902054859060ff1661300c5760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016107fb565b613018338787876142f4565b60016097559695505050505050565b600082815260cd6020526040902054640100000000900463ffffffff908116146131055760405162461bcd60e51b815260206004820152606b60248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205769746864726177616c60648201527f207374616b6520696e61637469766520636c61696d2068617320616c7265616460848201527f79206265656e206d61646500000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd60205260409020546801000000000000000090046001600160a01b031633146131c35760405162461bcd60e51b815260206004820152605260248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a2053656e6465722069732060648201527f6e6f742074686520776974686472617765720000000000000000000000000000608482015260a4016107fb565b600082815260cd602052604090205463ffffffff1642116132be5760405162461bcd60e51b815260206004820152609060248201527f44656c65676174696f6e4d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205374616b65206d61792060648201527f7374696c6c206265207375626a65637420746f20736c617368696e672062617360848201527f6564206f6e206e6577207461736b732e205761697420746f207365742073746160a48201527f6b65496e61637469766541667465722e0000000000000000000000000000000060c482015260e4016107fb565b6132cc611e9f600a42616065565b600092835260cd6020526040909220805463ffffffff93909316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9093169290921790915550565b613323614137565b61332b614b03565b6002609754141561337e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b6002609755600061339161038783616020565b600081815260cd6020526040902054909150640100000000900463ffffffff166134495760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e736c61736851756575656457697460448201527f6864726177616c3a207769746864726177616c20646f6573206e6f742065786960648201527f7374000000000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b600081815260cd60205260409020546801000000000000000090046001600160a01b0316158061354257506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e58398366134b360808501606086016159a6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561350a57600080fd5b505afa15801561351e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135429190615dfd565b6136005760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e736c61736851756575656457697460448201527f6864726177616c3a207769746864726177616c20686173206e6f74206265656e60648201527f207375636365737366756c6c79206368616c6c656e676564206f72206465706f60848201527f7369746f72206973206e6f742066726f7a656e0000000000000000000000000060a482015260c4016107fb565b600081815260cd6020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016905561363e838061608d565b9050905060005b8181101561376c57613657848061608d565b8281811061366757613667615d26565b905060200201602081019061367c91906159a6565b6001600160a01b031663d9caed1286613698602088018861608d565b858181106136a8576136a8615d26565b90506020020160208101906136bd91906159a6565b6136ca604089018961608d565b868181106136da576136da615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561374957600080fd5b505af115801561375d573d6000803e3d6000fd5b50505050806001019050613645565b50506001609755505050565b611f07336149e7565b6001600160a01b038116600090815260cc60205260408120546060918291908167ffffffffffffffff8111156137b9576137b96154e0565b6040519080825280602002602001820160405280156137e2578160200160208202803683370190505b50905060005b82811015613873576001600160a01b038616600090815260cb6020908152604080832060cc909252822080549192918490811061382757613827615d26565b60009182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061386057613860615d26565b60209081029190910101526001016137e8565b5060cc6000866001600160a01b03166001600160a01b0316815260200190815260200160002081818054806020026020016040519081016040528092919081815260200182805480156138ef57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116138d1575b50505050509150935093505050915091565b600061390b614137565b6040517fe58398360000000000000000000000000000000000000000000000000000000081523360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e58398369060240160206040518083038186803b15801561398657600080fd5b505afa15801561399a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139be9190615dfd565b15613a575760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415613aaa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560405162461bcd60e51b815260206004820152603260248201527f54737344656c65676174696f6e4d616e616765723a207175657565576974686460448201527f726177616c2069732064697361626c656420000000000000000000000000000060648201526084016107fb565b60d0546000906001600160a01b03163314613ba05760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b506001600160a01b038116600090815260ce60205260409020545b919050565b6040517f6d70f7ae0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636d70f7ae9060240160206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c779190615dfd565b15613dee576040517f778e55f30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063778e55f39060440160206040518083038186803b158015613d0357600080fd5b505afa158015613d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3b91906160f5565b6040517ff3e73875000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b0385169063f3e7387590602401602060405180830381600087803b158015613d9c57600080fd5b505af1158015613db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd491906160f5565b905060d254811115613deb5760019250505061082c565b50505b50600092915050565b600054610100900460ff1615808015613e175750600054600160ff909116105b80613e315750303b158015613e31575060005460ff166001145b613ea35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015613f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152504630604051602001613f6d9493929190615f4c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060c955613faf826143bb565b801561401257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61401e614b03565b60d180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b614060614b03565b60d255565b61406d614b03565b6001600160a01b0381166140e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107fb565b6140f2816143bb565b50565b6140fd614b03565b60d080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60655460ff1615611f075760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107fb565b600081614201576040805162461bcd60e51b81526020600482015260248101919091527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265733a60448201527f207368617265416d6f756e742073686f756c64206e6f74206265207a65726f2160648201526084016107fb565b6001600160a01b03808616600090815260cb60209081526040808320938716835292905220548083111561429d5760405162461bcd60e51b815260206004820152603560248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265733a60448201527f207368617265416d6f756e7420746f6f2068696768000000000000000000000060648201526084016107fb565b6001600160a01b03808716600090815260cb6020908152604080832093881683529290522083820390819055908314156142e6576142dc868686614e0d565b60019150506142ec565b60009150505b949350505050565b600061430b6001600160a01b03841686868561509f565b6040517f8340f5490000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152848116602483015260448201849052851690638340f54990606401602060405180830381600087803b15801561437657600080fd5b505af115801561438a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ae91906160f5565b90506142ec858583614b7f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f65da12640000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906365da12649060240160206040518083038186803b1580156144a457600080fd5b505afa1580156144b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144dc9190615fa0565b6040517f3e28391d0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690633e28391d9060240160206040518083038186803b15801561455b57600080fd5b505afa15801561456f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145939190615dfd565b156149e15760d1546040517fb57388d30000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063b57388d390602401602060405180830381600087803b1580156145f857600080fd5b505af115801561460c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146309190615dfd565b156149e15760d0546040517f14bfb5270000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906314bfb52790602401602060405180830381600087803b15801561469557600080fd5b505af11580156146a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146cd9190615dfd565b156147405760405162461bcd60e51b815260206004820152602260248201527f746865206f70657261746f72206973206e6f7420696e206a61696c207374617460448201527f757300000000000000000000000000000000000000000000000000000000000060648201526084016107fb565b6040517f778e55f30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152848116602483015260009184917f0000000000000000000000000000000000000000000000000000000000000000169063778e55f39060440160206040518083038186803b1580156147c757600080fd5b505afa1580156147db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ff91906160f5565b614809919061610e565b6040517ff3e73875000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b0386169063f3e7387590602401602060405180830381600087803b15801561486a57600080fd5b505af115801561487e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a291906160f5565b60d1546040517f68fe7d230000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529293509116906368fe7d2390602401602060405180830381600087803b15801561490457600080fd5b505af1158015614918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493c9190615dfd565b156149de5760d25481116149de5760405162461bcd60e51b815260206004820152604b60248201527f756e61626c652077697468647261772064756520746f206f70657261746f722760448201527f7320726573742073686172657320736d616c6c6572207468616e206d696e692060648201527f726571756972656d656e74000000000000000000000000000000000000000000608482015260a4016107fb565b50505b50505050565b6001600160a01b038116600090815260cc602052604090205415614a735760405162461bcd60e51b815260206004820152603c60248201527f496e766573746d656e744d616e616765722e5f756e64656c65676174653a206460448201527f65706f7369746f722068617320616374697665206465706f736974730000000060648201526084016107fb565b6040517fda8be8640000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063da8be86490602401600060405180830381600087803b158015614aef57600080fd5b505af11580156110dc573d6000803e3d6000fd5b6033546001600160a01b03163314611f075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107fb565b60008163ffffffff168363ffffffff1611614b785781611adc565b5090919050565b80614bf25760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e5f6164645368617265733a20736860448201527f617265732073686f756c64206e6f74206265207a65726f21000000000000000060648201526084016107fb565b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054614d29576001600160a01b038316600090815260cc60209081526040909120541115614cd25760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e5f6164645368617265733a20646560448201527f706f73697420776f756c6420657863656564204d41585f494e564553544f525f60648201527f44454c45474154494f4e5f4c454e475448000000000000000000000000000000608482015260a4016107fb565b6001600160a01b03838116600090815260cc602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b6001600160a01b03808416600090815260cb6020908152604080832093861683529290529081208054839290614d60908490616008565b90915550506040517f28a573ae0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b158015614df057600080fd5b505af1158015614e04573d6000803e3d6000fd5b50505050505050565b6001600160a01b03838116600090815260cc6020526040902080549183169184908110614e3c57614e3c615d26565b6000918252602090912001546001600160a01b03161415614efd576001600160a01b038316600090815260cc602052604090208054614e7d9060019061610e565b81548110614e8d57614e8d615d26565b60009182526020808320909101546001600160a01b03868116845260cc9092526040909220805491909216919084908110614eca57614eca615d26565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061501b565b6001600160a01b038316600090815260cc6020526040812054905b81811015615018576001600160a01b03858116600090815260cc6020526040902080549185169183908110614f4f57614f4f615d26565b6000918252602090912001546001600160a01b03161415615010576001600160a01b038516600090815260cc602052604090208054614f909060019061610e565b81548110614fa057614fa0615d26565b60009182526020808320909101546001600160a01b03888116845260cc9092526040909220805491909216919083908110614fdd57614fdd615d26565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550615018565b600101614f18565b50505b6001600160a01b038316600090815260cc6020526040902080548061504257615042616125565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526149e1928792916000916151659185169084906151f5565b805190915015611b7257808060200190518101906151839190615dfd565b611b725760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107fb565b60606142ec848460008585843b61524e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107fb565b600080866001600160a01b0316858760405161526a9190616154565b60006040518083038185875af1925050503d80600081146152a7576040519150601f19603f3d011682016040523d82523d6000602084013e6152ac565b606091505b50915091506152bc8282866152c7565b979650505050505050565b606083156152d6575081611adc565b8251156152e65782518084602001fd5b8160405162461bcd60e51b81526004016107fb9190616170565b6001600160a01b03811681146140f257600080fd5b8035613bbb81615300565b6000806040838503121561533357600080fd5b823561533e81615300565b9150602083013561534e81615300565b809150509250929050565b60008083601f84011261536b57600080fd5b50813567ffffffffffffffff81111561538357600080fd5b6020830191508360208260051b850101111561539e57600080fd5b9250929050565b60008060008060008060008060008060c08b8d0312156153c457600080fd5b6153cd8b615315565b99506153db60208c01615315565b985060408b013567ffffffffffffffff808211156153f857600080fd5b6154048e838f01615359565b909a50985060608d013591508082111561541d57600080fd5b6154298e838f01615359565b909850965060808d013591508082111561544257600080fd5b61544e8e838f01615359565b909650945060a08d013591508082111561546757600080fd5b506154748d828e01615359565b915080935050809150509295989b9194979a5092959850565b600080600080608085870312156154a357600080fd5b84356154ae81615300565b935060208501356154be81615300565b92506040850135915060608501356154d581615300565b939692955090935050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715615532576155326154e0565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561557f5761557f6154e0565b604052919050565b600067ffffffffffffffff8211156155a1576155a16154e0565b5060051b60200190565b600082601f8301126155bc57600080fd5b813560206155d16155cc83615587565b615538565b82815260059290921b840181019181810190868411156155f057600080fd5b8286015b8481101561561457803561560781615300565b83529183019183016155f4565b509695505050505050565b600082601f83011261563057600080fd5b813560206156406155cc83615587565b82815260059290921b8401810191818101908684111561565f57600080fd5b8286015b848110156156145780358352918301918301615663565b80356bffffffffffffffffffffffff81168114613bbb57600080fd5b6000604082840312156156a857600080fd5b6040516040810181811067ffffffffffffffff821117156156cb576156cb6154e0565b60405290508082356156dc81615300565b81526156ea6020840161567a565b60208201525092915050565b600060e0828403121561570857600080fd5b61571061550f565b9050813567ffffffffffffffff8082111561572a57600080fd5b615736858386016155ab565b8352602084013591508082111561574c57600080fd5b615758858386016155ab565b6020840152604084013591508082111561577157600080fd5b5061577e8482850161561f565b60408301525061579060608301615315565b60608201526157a28360808401615696565b60808201526157b360c08301615315565b60a082015292915050565b6000602082840312156157d057600080fd5b813567ffffffffffffffff8111156157e757600080fd5b6142ec848285016156f6565b6000806040838503121561580657600080fd5b823561581181615300565b946020939093013593505050565b60006040828403121561583157600080fd5b50919050565b60008060008060008060008060008060e08b8d03121561585657600080fd5b61585f8b615315565b995060208b013567ffffffffffffffff8082111561587c57600080fd5b6158888e838f01615359565b909b50995060408d01359150808211156158a157600080fd5b6158ad8e838f01615359565b909950975060608d01359150808211156158c657600080fd5b6158d28e838f01615359565b909750955060808d01359150808211156158eb57600080fd5b506158f88d828e01615359565b909450925061590c90508c60a08d0161581f565b90509295989b9194979a5092959850565b600060e0828403121561583157600080fd5b60006020828403121561594157600080fd5b813567ffffffffffffffff81111561595857600080fd5b6142ec8482850161591d565b6000806020838503121561597757600080fd5b823567ffffffffffffffff81111561598e57600080fd5b61599a85828601615359565b90969095509350505050565b6000602082840312156159b857600080fd5b8135611adc81615300565b803563ffffffff81168114613bbb57600080fd5b6000806000606084860312156159ec57600080fd5b8335925060208401356159fe81615300565b9150615a0c604085016159c3565b90509250925092565b80151581146140f257600080fd5b8035613bbb81615a15565b60008060408385031215615a4157600080fd5b823567ffffffffffffffff811115615a5857600080fd5b615a648582860161591d565b925050602083013561534e81615a15565b600080600060608486031215615a8a57600080fd5b8335615a9581615300565b9250602084013567ffffffffffffffff811115615ab157600080fd5b615abd8682870161591d565b9250506040840135615ace81615a15565b809150509250925092565b600080600060608486031215615aee57600080fd5b8335615af981615300565b92506020840135615b0981615300565b929592945050506040919091013590565b60008060408385031215615b2d57600080fd5b82359150615b3d602084016159c3565b90509250929050565b60008060408385031215615b5957600080fd5b8235615b6481615300565b9150602083013567ffffffffffffffff811115615b8057600080fd5b615b8c8582860161591d565b9150509250929050565b600081518084526020808501945080840160005b83811015615bcf5781516001600160a01b031687529582019590820190600101615baa565b509495945050505050565b600081518084526020808501945080840160005b83811015615bcf57815187529582019590820190600101615bee565b604081526000615c1d6040830185615b96565b8281036020840152615c2f8185615bda565b95945050505050565b600060208284031215615c4a57600080fd5b5035919050565b60008060008060008060008060008060e08b8d031215615c7057600080fd5b8a3567ffffffffffffffff80821115615c8857600080fd5b615c948e838f01615359565b909c509a5060208d0135915080821115615cad57600080fd5b615cb98e838f01615359565b909a50985060408d0135915080821115615cd257600080fd5b615cde8e838f01615359565b909850965060608d0135915080821115615cf757600080fd5b50615d048d828e01615359565b9095509350615d1890508c60808d0161581f565b915061590c60c08c01615a23565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b03868116825260606020808401829052908301869052600091879160808501845b89811015615da4578435615d9081615300565b841682529382019390820190600101615d7d565b5085810360408701528681527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871115615ddd57600080fd5b8660051b9350838883830137600093010191825250979650505050505050565b600060208284031215615e0f57600080fd5b8151611adc81615a15565b60e081526000615e2d60e0830189615b96565b82810360208481019190915288518083528982019282019060005b81811015615e6d5784516001600160a01b031683529383019391830191600101615e48565b50508481036040860152615e81818a615bda565b6001600160a01b038981166060880152885116608087015260208801516bffffffffffffffffffffffff1660a08701529350615ebc92505050565b6001600160a01b03831660c0830152979650505050505050565b60005b83811015615ef1578181015183820152602001615ed9565b838111156149e15750506000910152565b60008151808452615f1a816020860160208601615ed6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b848152608060208201526000615f656080830186615f02565b90508360408301526001600160a01b038316606083015295945050505050565b600060208284031215615f9757600080fd5b611adc8261567a565b600060208284031215615fb257600080fd5b8151611adc81615300565b600060408284031215615fcf57600080fd5b611adc8383615696565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561601b5761601b615fd9565b500190565b600061082c36836156f6565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561605e5761605e615fd9565b5060010190565b600063ffffffff80831681851680830382111561608457616084615fd9565b01949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126160c257600080fd5b83018035915067ffffffffffffffff8211156160dd57600080fd5b6020019150600581901b360382131561539e57600080fd5b60006020828403121561610757600080fd5b5051919050565b60008282101561612057616120615fd9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251616166818460208701615ed6565b9190910192915050565b602081526000611adc6020830184615f0256fea26469706673582212204626461268ab971a8e03a675cfce0e82477c6334c799cc358aca89841c0e4e2264736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
