{
  "_format": "hh-sol-artifact-1",
  "contractName": "Valhalla",
  "sourceName": "contracts/Valhalla.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_target",
          "type": "address"
        }
      ],
      "name": "Blacklisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ClaimRankReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ClaimReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "RankRewardClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "RankRewardOpened",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum Rank",
          "name": "rank",
          "type": "uint8"
        }
      ],
      "name": "RankUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        }
      ],
      "name": "Registration",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GENESIS_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IPO_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVED_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STAFF_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountMap",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isImported",
          "type": "bool"
        },
        {
          "internalType": "enum Rank",
          "name": "rank",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "downlineCount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "directDownlineCount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rankUpdatedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rankRewardClaimedAt",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "blackListAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "blacklistedAddressMap",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_ipoPol",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_referalPol",
          "type": "uint256"
        }
      ],
      "name": "changeFeeRegister",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimRankReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployedAtBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directCommonRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directEpicRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directLegendRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directRareRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directSuperLegendRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "directSuperRareRankMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeReceiverAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGenesisPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGlobalPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIpoPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMyRankReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRegistrationFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gnetERC20",
      "outputs": [
        {
          "internalType": "contract GNET",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_referrer",
          "type": "address"
        }
      ],
      "name": "importAccount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "root_address",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "_feeReceiverAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_reserveAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_ipoPoolDistribution",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_referrerPoolDistribution",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRankRewardClaimable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nftGetter",
      "outputs": [
        {
          "internalType": "contract NFTGetter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "poolMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "valueLeft",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rankDistribution",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "common",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rare",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "superRare",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "epic",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "legend",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "superLegend",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rankRewardClaimableAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "referrer",
          "type": "address"
        }
      ],
      "name": "register",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract GNET",
          "name": "_gnetERC20",
          "type": "address"
        }
      ],
      "name": "setGntAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract NFTGetter",
          "name": "_nftGetter",
          "type": "address"
        }
      ],
      "name": "setNftAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startClaimingRankReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stopClaimingRankReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600254610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60025460ff9081161015620000e6576002805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516142716200012060003960008181610ff501528181611035015281816116d301528181611713015261178b01526142716000f3fe6080604052600436106102395760003560e01c806301ffc9a71461023e57806302c435e5146102735780630946e807146102965780630b102d1a146102ab5780630defebeb146102cd5780631d069f1814610316578063248a9ca314610336578063249a22e414610356578063286e66bc146103845780632f2ff15d146103b457806330cf4dc5146103d457806336568abe146104085780633659cfe6146104285780633b0e0133146104485780634237ea8d146104685780634420e4861461047d57806344712a6c1461049057806344c94201146104c0578063471ac84e146104ee5780634f1ef2861461050557806352d1902d14610518578063602674821461052d5780636ae994a7146105425780636c76716c146105645780636dfab78e1461059257806373c2fd23146105b457806383d44339146105e157806385290fa11461060e57806391d1485414610630578063936d39d714610650578063951053a61461067e57806398d41efb146106935780639a454b99146106a8578063a217fddf146106bf578063b25dd529146106d4578063b88a802f146106f4578063b900637714610709578063ba2d509514610729578063bac8cb9e1461074b578063c33e108f1461076b578063c415bf3d14610799578063cb98f68e146107ae578063d35cb1ad146107dc578063d3f46b8b1461083a578063d547741f1461085c578063e961e1ff1461087c578063f481e8631461089d578063f72c0d8b146108be578063f79ed94b146108e0578063fa2d9ff014610901575b600080fd5b34801561024a57600080fd5b5061025e610259366004613863565b610984565b60405190151581526020015b60405180910390f35b34801561027f57600080fd5b506102886109bb565b60405190815260200161026a565b3480156102a257600080fd5b50610288610cbc565b3480156102b757600080fd5b506102cb6102c63660046138a2565b610cd5565b005b3480156102d957600080fd5b506103016102e83660046138bf565b6000602081905290815260409020805460019091015482565b6040805192835260208301919091520161026a565b34801561032257600080fd5b506102cb6103313660046138e8565b610d28565b34801561034257600080fd5b506102886103513660046138bf565b610f37565b34801561036257600080fd5b506102886103713660046138a2565b6101046020526000908152604090205481565b34801561039057600080fd5b5061025e61039f3660046138a2565b60016020526000908152604090205460ff1681565b3480156103c057600080fd5b506102cb6103cf366004613921565b610f4c565b3480156103e057600080fd5b506102887f07b941733a7a0fb95acb53f7ec363f2e58bcfffba15469eb7d5ade1ddbb3447481565b34801561041457600080fd5b506102cb610423366004613921565b610f6d565b34801561043457600080fd5b506102cb6104433660046138a2565b610feb565b34801561045457600080fd5b506102cb6104633660046138a2565b6110b3565b34801561047457600080fd5b506102cb6111f4565b6102cb61048b3660046138a2565b611372565b34801561049c57600080fd5b506104a5611671565b6040805182518152602092830151928101929092520161026a565b3480156104cc57600080fd5b506102886104db3660046138a2565b6101006020526000908152604090205481565b3480156104fa57600080fd5b506102886101075481565b6102cb61051336600461398c565b6116c9565b34801561052457600080fd5b5061028861177e565b34801561053957600080fd5b506104a561182c565b34801561054e57600080fd5b506101065461025e90600160a01b900460ff1681565b34801561057057600080fd5b5061028861057f3660046138a2565b6101036020526000908152604090205481565b34801561059e57600080fd5b506102886000805160206140b583398151915281565b3480156105c057600080fd5b506102886105cf3660046138a2565b60ff6020526000908152604090205481565b3480156105ed57600080fd5b506102886105fc3660046138a2565b60fe6020526000908152604090205481565b34801561061a57600080fd5b506102886000805160206140d583398151915281565b34801561063c57600080fd5b5061025e61064b366004613921565b6118a8565b34801561065c57600080fd5b5061011154610671906001600160a01b031681565b60405161026a9190613a33565b34801561068a57600080fd5b506104a56118d3565b34801561069f57600080fd5b506102cb61193d565b3480156106b457600080fd5b506102886101085481565b3480156106cb57600080fd5b50610288600081565b3480156106e057600080fd5b506102cb6106ef366004613a47565b611ac2565b34801561070057600080fd5b506102cb611af6565b34801561071557600080fd5b506102cb6107243660046138a2565b611c61565b34801561073557600080fd5b5061028860008051602061417583398151915281565b34801561075757600080fd5b506102cb610766366004613a69565b611cab565b34801561077757600080fd5b506102886107863660046138a2565b6101016020526000908152604090205481565b3480156107a557600080fd5b506102cb611fa4565b3480156107ba57600080fd5b506102886107c93660046138a2565b6101026020526000908152604090205481565b3480156107e857600080fd5b5061010b5461010c5461010d5461010e5461010f546101105461080d95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161026a565b34801561084657600080fd5b506102886000805160206141dc83398151915281565b34801561086857600080fd5b506102cb610877366004613921565b6126bf565b34801561088857600080fd5b5061011254610671906001600160a01b031681565b3480156108a957600080fd5b5061010554610671906001600160a01b031681565b3480156108ca57600080fd5b5061028860008051602061413583398151915281565b3480156108ec57600080fd5b5061010654610671906001600160a01b031681565b34801561090d57600080fd5b5061097061091c3660046138a2565b60fd602052600090815260409020805460018201546002830154600384015460049094015460ff8085169561010086048216956201000081049092169463010000009092046001600160a01b031693919288565b60405161026a989796959493929190613b9a565b60006001600160e01b03198216637965db0b60e01b14806109b557506301ffc9a760e01b6001600160e01b03198316145b92915050565b33600090815260fd6020908152604080832081516101008082018452825460ff80821615158452918104821615159583019590955285949193840191620100009004166006811115610a0f57610a0f613b62565b6006811115610a2057610a20613b62565b81528154630100000090046001600160a01b031660208083019190915260018301546040830152600283015460608301526003830154608083015260049092015460a0909101526000805160206141dc83398151915260009081529081905260008051602061421c833981519152549192506000805160206140f5833981519152919003610ab15760009250505090565b61010654600160a01b900460ff161515600003610ad15760009250505090565b610107548260e0015110610ae85760009250505090565b600082604001516006811115610b0057610b00613b62565b03610b0e5760009250505090565b600080600184604001516006811115610b2957610b29613b62565b03610b555761010b546001840154909250606490610b48906003613c02565b610b529190613c19565b90505b600284604001516006811115610b6d57610b6d613b62565b03610b995761010c546001840154909250606490610b8c906007613c02565b610b969190613c19565b90505b600384604001516006811115610bb157610bb1613b62565b03610bdd5761010d546001840154909250606490610bd090600c613c02565b610bda9190613c19565b90505b600484604001516006811115610bf557610bf5613b62565b03610c215761010e546001840154909250606490610c14906012613c02565b610c1e9190613c19565b90505b600584604001516006811115610c3957610c39613b62565b03610c655761010f546001840154909250606490610c5890601a613c02565b610c629190613c19565b90505b600684604001516006811115610c7d57610c7d613b62565b03610ca957610110546001840154909250606490610c9c906022613c02565b610ca69190613c19565b90505b610cb38282613c19565b94505050505090565b600061010a5461010954610cd09190613c3b565b905090565b610ce06000336118a8565b610d055760405162461bcd60e51b8152600401610cfc90613c4e565b60405180910390fd5b61011180546001600160a01b0319166001600160a01b0392909216919091179055565b610d336000336118a8565b610d4f5760405162461bcd60e51b8152600401610cfc90613c4e565b6001600160a01b038216600090815260fd60205260409020805460ff1615610d895760405162461bcd60e51b8152600401610cfc90613c85565b6001600160a01b038216610daf5760405162461bcd60e51b8152600401610cfc90613cb9565b6001600160a01b038216600090815260fd602052604090205460ff16610de75760405162461bcd60e51b8152600401610cfc90613ce3565b6001600160a01b03821660009081526001602052604090205460ff1615610e205760405162461bcd60e51b8152600401610cfc90613d1a565b61010654600160a01b900460ff1615610e4b5760405162461bcd60e51b8152600401610cfc90613d48565b80546000600280840182905560ff196001600160a01b038616630100000081029190911662ffff01600160b81b031990941693909317600190811762ffff00191661010017855592825260fd60205260408220018054909190610eaf908490613c3b565b9091555082905060005b600f811015610f0257610ecb826126db565b6001600160a01b03918216600090815260fd6020526040902054630100000090049091169080610efa81613d75565b915050610eb9565b50826001600160a01b0316846001600160a01b03166000805160206141fc83398151915260405160405180910390a350505050565b60009081526067602052604090206001015490565b610f5582610f37565b610f5e81612e94565b610f688383612e9e565b505050565b6001600160a01b0381163314610fdd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cfc565b610fe78282612f24565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110335760405162461bcd60e51b8152600401610cfc90613d8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611065612f8b565b6001600160a01b03161461108b5760405162461bcd60e51b8152600401610cfc90613dc8565b61109481612fa7565b604080516000808252602082019092526110b09183919061300b565b50565b6110be6000336118a8565b6110da5760405162461bcd60e51b8152600401610cfc90613c4e565b336001600160a01b038216036111325760405162461bcd60e51b815260206004820152601d60248201527f596f752063616e6e6f7420626c61636b6c69737420796f757273656c660000006044820152606401610cfc565b6001600160a01b0381166111925760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f7420626c61636b6c6973742061646472657373207a65726044820152606f60f81b6064820152608401610cfc565b6111bd816001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6040516001600160a01b038216907fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85590600090a250565b6111ff6000336118a8565b8061121d575061121d6000805160206140d5833981519152336118a8565b6112395760405162461bcd60e51b8152600401610cfc90613c4e565b61010654600160a01b900460ff16156112865760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b6044820152606401610cfc565b610106805460ff60a01b1916600160a01b17905542610107556000805160206141dc83398151915260009081526020526000805160206140f5833981519152805460008051602061421c8339815191528190556112e39080613e02565b81556101115460408051634237ea8d60e01b815290516001600160a01b0390921691634237ea8d9160048082019260009290919082900301818387803b15801561132c57600080fd5b505af1158015611340573d6000803e3d6000fd5b50506040514292507fe937b2648ad52d1aaf4f7765235791fc9a2fbe11dae61f84bc9f4f2dca491ee89150600090a250565b3360009081526001602081905260409091205460ff16151590036113a85760405162461bcd60e51b8152600401610cfc90613e15565b60006113b2610cbc565b33600090815260fd6020526040902090915034821461140e5760405162461bcd60e51b8152602060048201526018602482015277556e6d6174636820526567697374726174696f6e2046656560401b6044820152606401610cfc565b805460ff16156114305760405162461bcd60e51b8152600401610cfc90613c85565b6001600160a01b0383166114565760405162461bcd60e51b8152600401610cfc90613cb9565b6001600160a01b038316600090815260fd602052604090205460ff1661148e5760405162461bcd60e51b8152600401610cfc90613ce3565b6001600160a01b03831660009081526001602052604090205460ff16156114c75760405162461bcd60e51b8152600401610cfc90613d1a565b61010654600160a01b900460ff16156114f25760405162461bcd60e51b8152600401610cfc90613d48565b805462ff000019600162ffff01600160b81b031990921663010000006001600160a01b03871690810260ff19169190911783179190911683556000600280850182905591815260fd602052604081209091018054909190611554908490613c3b565b90915550506101095461156690613176565b600061157461010a546131bb565b90506000606461010a54601161158a9190613c02565b6115949190613c19565b905061159f8161334f565b6115a98183613e02565b91506000606461010a5460036115bf9190613c02565b6115c99190613c19565b610106546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611605573d6000803e3d6000fd5b506116108184613e02565b610105546001600160a01b0316600090815260fe6020526040812080549295508592909190611640908490613c3b565b90915550506040516001600160a01b0387169033906000805160206141fc83398151915290600090a3505050505050565b611679613849565b506000805160206141dc83398151915260009081526020908152604080518082019091526000805160206140f583398151915254815260008051602061421c833981519152549181019190915290565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036117115760405162461bcd60e51b8152600401610cfc90613d8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611743612f8b565b6001600160a01b0316146117695760405162461bcd60e51b8152600401610cfc90613dc8565b61177282612fa7565b610fe78282600161300b565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118195760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610cfc565b5060008051602061415583398151915290565b611834613849565b5060008051602061417583398151915260009081526020908152604080518082019091527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cda95481527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cdaa549181019190915290565b60009182526067602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6118db613849565b506000805160206140b583398151915260009081526020908152604080518082019091526000805160206141958339815191525481527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9076549181019190915290565b6119486000336118a8565b8061196657506119666000805160206140d5833981519152336118a8565b6119825760405162461bcd60e51b8152600401610cfc90613c4e565b61010654600160a01b900460ff166119d65760405162461bcd60e51b815260206004820152601760248201527614985b9ac81c995dd85c99081b9bdd081cdd185c9d1959604a1b6044820152606401610cfc565b610106805460ff60a01b191690556000805160206141dc8339815191526000908152602081905260008051602061421c833981519152546000805160206140f5833981519152805490928391611a2d908490613c3b565b909155505060006001820181905561011154604080516398d41efb60e01b815290516001600160a01b03909216926398d41efb9260048084019382900301818387803b158015611a7c57600080fd5b505af1158015611a90573d6000803e3d6000fd5b50506040514292507fa5ea49deceab9e6efacd9ebadc91dfd0d3eb98a2aeb02da350b84dd58c1b3b689150600090a250565b611acd6000336118a8565b611ae95760405162461bcd60e51b8152600401610cfc90613c4e565b6101099190915561010a55565b3360009081526001602081905260409091205460ff1615159003611b2c5760405162461bcd60e51b8152600401610cfc90613e15565b33600090815260fe602052604090205480611b835760405162461bcd60e51b8152602060048201526017602482015276139bc81c995dd85c99081d1bc818994818db185a5b5959604a1b6044820152606401610cfc565b60006064611b9283600a613c02565b611b9c9190613c19565b610105546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611bd8573d6000803e3d6000fd5b50336108fc611be78385613e02565b6040518115909202916000818181858888f19350505050158015611c0f573d6000803e3d6000fd5b5033600081815260fe60205260408120557fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e611c4b8385613e02565b6040519081526020015b60405180910390a25050565b611c6c6000336118a8565b611c885760405162461bcd60e51b8152600401610cfc90613c4e565b61011280546001600160a01b0319166001600160a01b0392909216919091179055565b600254610100900460ff1615808015611ccb5750600254600160ff909116105b80611cec5750611cda3061338b565b158015611cec575060025460ff166001145b611d4f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cfc565b6002805460ff191660011790558015611d72576002805461ff0019166101001790555b611d7a61339a565b611d8261339a565b611d8d600033612e9e565b611da560008051602061413583398151915233612e9e565b611db0600088612e9e565b436101085561010983905561010a82905561010580546001600160a01b038088166001600160a01b03199283168117909355610106805491881691909216179055600081815260fd6020526040808220805462ffff01600160b81b0319166001179055519091906000805160206141fc833981519152908390a36001600160a01b03808516600090815260fd6020526040808220805462ffff01600160b81b03191660011790555190918716906000805160206141fc833981519152908390a36000805b8751811015611f53576000888281518110611e9157611e91613e42565b6020908102919091018101516001600160a01b038116600090815260fd9092526040909120805460ff191660019081179091558a5191925090611ed5908490613e02565b611edf9190613e02565b6001600160a01b03828116600081815260fd60205260408082206001808201969096556002810195909555845462010000600160b81b0319166301000000948916948502179094559251919290916000805160206141fc8339815191529190a3915080611f4b81613d75565b915050611e74565b50508015611f9b576002805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b3360009081526001602081905260409091205460ff1615159003611fda5760405162461bcd60e51b8152600401610cfc90613e15565b6000611fe46109bb565b610111546040516383aea64560e01b81529192506000916001600160a01b03909116906383aea6459061201b903390600401613a33565b602060405180830381865afa158015612038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205c9190613e58565b33600090815260fd60205260409020909150826120b65760405162461bcd60e51b8152602060048201526018602482015277139bc814995dd85c990818d85b8818994818db185a5b595960421b6044820152606401610cfc565b6001815462010000900460ff1660068111156120d4576120d4613b62565b036121875761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190613e71565b61215c90600a613f78565b6121689061c350613c02565b8210156121875760405162461bcd60e51b8152600401610cfc90613f87565b6002815462010000900460ff1660068111156121a5576121a5613b62565b036122595761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190613e71565b61222d90600a613f78565b61223a9062030d40613c02565b8210156122595760405162461bcd60e51b8152600401610cfc90613f87565b6003815462010000900460ff16600681111561227757612277613b62565b0361232b5761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190613e71565b6122ff90600a613f78565b61230c90620f4240613c02565b82101561232b5760405162461bcd60e51b8152600401610cfc90613f87565b6004815462010000900460ff16600681111561234957612349613b62565b036123fd5761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c69190613e71565b6123d190600a613f78565b6123de90624c4b40613c02565b8210156123fd5760405162461bcd60e51b8152600401610cfc90613f87565b6005815462010000900460ff16600681111561241b5761241b613b62565b036124d05761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190613e71565b6124a390600a613f78565b6124b19063017d7840613c02565b8210156124d05760405162461bcd60e51b8152600401610cfc90613f87565b6006815462010000900460ff1660068111156124ee576124ee613b62565b036125a35761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b9190613e71565b61257690600a613f78565b612584906305f5e100613c02565b8210156125a35760405162461bcd60e51b8152600401610cfc90613f87565b600060646125b285600a613c02565b6125bc9190613c19565b610105546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125f8573d6000803e3d6000fd5b50336108fc6126078387613e02565b6040518115909202916000818181858888f1935050505015801561262f573d6000803e3d6000fd5b504260048301556000805160206141dc8339815191526000908152602081905260008051602061421c83398151915280546000805160206140f58339815191529287929161267e908490613e02565b909155505060405185815233907feff26bb1aaac7ce27452afaf8402dbd160686540ece1c14d857cf0c272b5cba49060200160405180910390a25050505050565b6126c882610f37565b6126d181612e94565b610f688383612f24565b6001600160a01b038116600090815260fd60205260408120600180820180549293919290919061270c908490613c3b565b9091555060069050815462010000900460ff16600681111561273057612730613b62565b03612739575050565b61fa0081600101541015801561276a57506005815462010000900460ff16600681111561276857612768613b62565b145b15612865576001600160a01b0382166000908152610104602090815260408083205461010390925282205461279f9190613c3b565b90506002811061285f57815462ff000019166206000017825561010f8054600191906000906127cf908490613e02565b90915550506101108054600191906000906127eb908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010360205260408120805460019290612822908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010460205260408120805460019290612859908490613c3b565b90915550505b50612e4f565b613e8081600101541015801561289657506004815462010000900460ff16600681111561289457612894613b62565b145b1561299a576001600160a01b038216600090815261010460209081526040808320546101038352818420546101029093529083205490916128d691613c3b565b6128e09190613c3b565b90506002811061285f57815462ff000019166205000017825561010e805460019190600090612910908490613e02565b909155505061010f80546001919060009061292c908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010260205260408120805460019290612963908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010360205260408120805460019290612859908490613c3b565b6119008160010154101580156129cb57506003815462010000900460ff1660068111156129c9576129c9613b62565b145b15612ae2576001600160a01b03821660009081526101046020908152604080832054610103835281842054610102845282852054610101909452918420549092612a1491613c3b565b612a1e9190613c3b565b612a289190613c3b565b90506002811061285f57815462ff000019166204000017825561010d805460019190600090612a58908490613e02565b909155505061010e805460019190600090612a74908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010160205260408120805460019290612aab908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010260205260408120805460019290612859908490613c3b565b610640816001015410158015612b1357506002815462010000900460ff166006811115612b1157612b11613b62565b145b15612c41576001600160a01b03821660009081526101046020908152604080832054610103835281842054610102845282852054610101855283862054610100909552928520549193909291612b699190613c3b565b612b739190613c3b565b612b7d9190613c3b565b612b879190613c3b565b90506002811061285f57815462ff000019166203000017825561010c805460019190600090612bb7908490613e02565b909155505061010d805460019190600090612bd3908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010060205260408120805460019290612c0a908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010160205260408120805460019290612859908490613c3b565b610190816001015410158015612c7257506001815462010000900460ff166006811115612c7057612c70613b62565b145b15612db3576001600160a01b0382166000908152610104602090815260408083205461010383528184205461010284528285205461010185528386205461010086528487205460ff909652938620549294919390929091612cd291613c3b565b612cdc9190613c3b565b612ce69190613c3b565b612cf09190613c3b565b612cfa9190613c3b565b90506002811061285f57815462ff000019166202000017825561010b805460019190600090612d2a908490613e02565b909155505061010c805460019190600090612d46908490613c3b565b90915550508154630100000090046001600160a01b0316600090815260ff60205260408120805460019290612d7c908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010060205260408120805460019290612859908490613c3b565b6064816001015410158015612de357506000815462010000900460ff166006811115612de157612de1613b62565b145b15610fe757805462ff000019166201000017815561010b805460019190600090612e0e908490613c3b565b90915550508054630100000090046001600160a01b0316600090815260ff60205260408120805460019290612e44908490613c3b565b90915550612e4f9050565b80546040516001600160a01b038416917fc044cb19a6b2fe37c1a0618f3a47a874033707b4034762c63477d77c5556e22e91611c559162010000900460ff1690613fad565b6110b08133613407565b612ea882826118a8565b610fe75760008281526067602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ee03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612f2e82826118a8565b15610fe75760008281526067602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020614155833981519152546001600160a01b031690565b612fbf600080516020614135833981519152336118a8565b6110b05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792055504752414445522063616e20706572666f726d20616374696f6e6044820152606401610cfc565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561303e57610f6883613460565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613098575060408051601f3d908101601f1916820190925261309591810190613e58565b60015b6130fb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610cfc565b600080516020614155833981519152811461316a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610cfc565b50610f688383836134fa565b6000805160206140b5833981519152600090815260208190526000805160206141958339815191528054909183918391906131b2908490613c3b565b90915550505050565b33600090815260fd6020908152604080832081516101e081018352601e81526008938101939093526003918301919091526002606083018190526080830152600160a0830181905260c0830181905260e08301819052610100830181905261012083018190526101408301819052610160830181905261018083018190526101a083018190526101c08301528391829190845b600f811015613344578254630100000090046001600160a01b0316806132745750613344565b6001600160a01b03811660009081526001602052604081205460ff1615159003613319576132a1816126db565b60008383600f81106132b5576132b5613e42565b602002015160ff169050600060646132cd838a613c02565b6132d79190613c19565b6001600160a01b038416600090815260fe6020526040812080549293508392909190613304908490613c3b565b9091555061331490508188613e02565b965050505b6001600160a01b0316600090815260fd6020526040902092508061333c81613d75565b91505061324e565b509195945050505050565b6000805160206141dc833981519152600090815260208190526000805160206140f58339815191528054909183918391906131b2908490613c3b565b6001600160a01b03163b151590565b600254610100900460ff166134055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610cfc565b565b61341182826118a8565b610fe75761341e81613525565b613429836020613537565b60405160200161343a929190613fdf565b60408051601f198184030181529082905262461bcd60e51b8252610cfc9160040161404e565b6134698161338b565b6134cb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610cfc565b60008051602061415583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613503836136d9565b6000825111806135105750805b15610f685761351f8383613719565b50505050565b60606109b56001600160a01b03831660145b60606000613546836002613c02565b613551906002613c3b565b6001600160401b0381111561356857613568613946565b6040519080825280601f01601f191660200182016040528015613592576020820181803683370190505b509050600360fc1b816000815181106135ad576135ad613e42565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106135dc576135dc613e42565b60200101906001600160f81b031916908160001a9053506000613600846002613c02565b61360b906001613c3b565b90505b6001811115613683576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061363f5761363f613e42565b1a60f81b82828151811061365557613655613e42565b60200101906001600160f81b031916908160001a90535060049490941c9361367c81614081565b905061360e565b5083156136d25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cfc565b9392505050565b6136e281613460565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606137248361338b565b61377f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610cfc565b600080846001600160a01b03168460405161379a9190614098565b600060405180830381855af49150503d80600081146137d5576040519150601f19603f3d011682016040523d82523d6000602084013e6137da565b606091505b509150915061380282826040518060600160405280602781526020016141b56027913961380b565b95945050505050565b6060831561381a5750816136d2565b6136d2838381511561382f5781518083602001fd5b8060405162461bcd60e51b8152600401610cfc919061404e565b604051806040016040528060008152602001600081525090565b60006020828403121561387557600080fd5b81356001600160e01b0319811681146136d257600080fd5b6001600160a01b03811681146110b057600080fd5b6000602082840312156138b457600080fd5b81356136d28161388d565b6000602082840312156138d157600080fd5b5035919050565b80356138e38161388d565b919050565b600080604083850312156138fb57600080fd5b82356139068161388d565b915060208301356139168161388d565b809150509250929050565b6000806040838503121561393457600080fd5b8235915060208301356139168161388d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561398457613984613946565b604052919050565b6000806040838503121561399f57600080fd5b82356139aa8161388d565b91506020838101356001600160401b03808211156139c757600080fd5b818601915086601f8301126139db57600080fd5b8135818111156139ed576139ed613946565b6139ff601f8201601f1916850161395c565b91508082528784828501011115613a1557600080fd5b80848401858401376000848284010152508093505050509250929050565b6001600160a01b0391909116815260200190565b60008060408385031215613a5a57600080fd5b50508035926020909101359150565b60008060008060008060c08789031215613a8257600080fd5b8635613a8d8161388d565b95506020878101356001600160401b0380821115613aaa57600080fd5b818a0191508a601f830112613abe57600080fd5b813581811115613ad057613ad0613946565b8060051b9150613ae184830161395c565b818152918301840191848101908d841115613afb57600080fd5b938501935b83851015613b255784359250613b158361388d565b8282529385019390850190613b00565b809a50505050505050613b3a604088016138d8565b9350613b48606088016138d8565b92506080870135915060a087013590509295509295509295565b634e487b7160e01b600052602160045260246000fd5b60078110613b9657634e487b7160e01b600052602160045260246000fd5b9052565b881515815287151560208201526101008101613bb96040830189613b78565b6001600160a01b03969096166060820152608081019490945260a084019290925260c083015260e0909101529392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b5576109b5613bec565b600082613c3657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109b5576109b5613bec565b6020808252601d908201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e000000604082015260600190565b6020808252601a90820152791059191c995cdcc8185b1c9958591e481c9959da5cdd195c995960321b604082015260600190565b60208082526010908201526f24b73b30b634b2103932b332b93932b960811b604082015260600190565b6020808252601d908201527f52656665727265722073686f756c642062652072656769737465726564000000604082015260600190565b602080825260149082015273149959995c9c995c88189b1858dadb1a5cdd195960621b604082015260600190565b602080825260139082015272149959da5cdd1c985d1a5bdb8818db1bdcd959606a1b604082015260600190565b600060018201613d8757613d87613bec565b5060010190565b6020808252602c9082015260008051602061411583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061411583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b818103818111156109b5576109b5613bec565b6020808252601390820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613e6a57600080fd5b5051919050565b600060208284031215613e8357600080fd5b815160ff811681146136d257600080fd5b600181815b80851115613ecf578160001904821115613eb557613eb5613bec565b80851615613ec257918102915b93841c9390800290613e99565b509250929050565b600082613ee6575060016109b5565b81613ef3575060006109b5565b8160018114613f095760028114613f1357613f2f565b60019150506109b5565b60ff841115613f2457613f24613bec565b50506001821b6109b5565b5060208310610133831016604e8410600b8410161715613f52575081810a6109b5565b613f5c8383613e94565b8060001904821115613f7057613f70613bec565b029392505050565b60006136d260ff841683613ed7565b6020808252600c908201526b4e6f7420456c696769626c6560a01b604082015260600190565b602081016109b58284613b78565b60005b83811015613fd6578181015183820152602001613fbe565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614011816017850160208801613fbb565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614042816028840160208801613fbb565b01602801949350505050565b602081526000825180602084015261406d816040850160208701613fbb565b601f01601f19169190910160400192915050565b60008161409057614090613bec565b506000190190565b600082516140aa818460208701613fbb565b919091019291505056feef78ff2707f55cf683ecba27f753a1f73d88a2972299daeedcdcce2c52b7821d5620a1113a72b02a617976b3f6b15600dd7a8b3a916a9ca01e23119d989a0543335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c046756e6374696f6e206d7573742062652063616c6c6564207468726f75676820189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc791b07db9f5ba47b7333684f8aab1753657d4cf52dbb1ca2e58c7c7643deb25ce48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9075416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644caf09f7dd9cf5930a0d30d4dba10a4d06c1e6d90491f8198b355f99152771b02a4f530ae55f002aac4686b649762fc68e96bd8b80ac835b41777145c94e1f8a335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c1a264697066735822122091cc95c0fe28f586592b7b39e8bc6c987a146b2b32f729327ae83a85055b37f264736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102395760003560e01c806301ffc9a71461023e57806302c435e5146102735780630946e807146102965780630b102d1a146102ab5780630defebeb146102cd5780631d069f1814610316578063248a9ca314610336578063249a22e414610356578063286e66bc146103845780632f2ff15d146103b457806330cf4dc5146103d457806336568abe146104085780633659cfe6146104285780633b0e0133146104485780634237ea8d146104685780634420e4861461047d57806344712a6c1461049057806344c94201146104c0578063471ac84e146104ee5780634f1ef2861461050557806352d1902d14610518578063602674821461052d5780636ae994a7146105425780636c76716c146105645780636dfab78e1461059257806373c2fd23146105b457806383d44339146105e157806385290fa11461060e57806391d1485414610630578063936d39d714610650578063951053a61461067e57806398d41efb146106935780639a454b99146106a8578063a217fddf146106bf578063b25dd529146106d4578063b88a802f146106f4578063b900637714610709578063ba2d509514610729578063bac8cb9e1461074b578063c33e108f1461076b578063c415bf3d14610799578063cb98f68e146107ae578063d35cb1ad146107dc578063d3f46b8b1461083a578063d547741f1461085c578063e961e1ff1461087c578063f481e8631461089d578063f72c0d8b146108be578063f79ed94b146108e0578063fa2d9ff014610901575b600080fd5b34801561024a57600080fd5b5061025e610259366004613863565b610984565b60405190151581526020015b60405180910390f35b34801561027f57600080fd5b506102886109bb565b60405190815260200161026a565b3480156102a257600080fd5b50610288610cbc565b3480156102b757600080fd5b506102cb6102c63660046138a2565b610cd5565b005b3480156102d957600080fd5b506103016102e83660046138bf565b6000602081905290815260409020805460019091015482565b6040805192835260208301919091520161026a565b34801561032257600080fd5b506102cb6103313660046138e8565b610d28565b34801561034257600080fd5b506102886103513660046138bf565b610f37565b34801561036257600080fd5b506102886103713660046138a2565b6101046020526000908152604090205481565b34801561039057600080fd5b5061025e61039f3660046138a2565b60016020526000908152604090205460ff1681565b3480156103c057600080fd5b506102cb6103cf366004613921565b610f4c565b3480156103e057600080fd5b506102887f07b941733a7a0fb95acb53f7ec363f2e58bcfffba15469eb7d5ade1ddbb3447481565b34801561041457600080fd5b506102cb610423366004613921565b610f6d565b34801561043457600080fd5b506102cb6104433660046138a2565b610feb565b34801561045457600080fd5b506102cb6104633660046138a2565b6110b3565b34801561047457600080fd5b506102cb6111f4565b6102cb61048b3660046138a2565b611372565b34801561049c57600080fd5b506104a5611671565b6040805182518152602092830151928101929092520161026a565b3480156104cc57600080fd5b506102886104db3660046138a2565b6101006020526000908152604090205481565b3480156104fa57600080fd5b506102886101075481565b6102cb61051336600461398c565b6116c9565b34801561052457600080fd5b5061028861177e565b34801561053957600080fd5b506104a561182c565b34801561054e57600080fd5b506101065461025e90600160a01b900460ff1681565b34801561057057600080fd5b5061028861057f3660046138a2565b6101036020526000908152604090205481565b34801561059e57600080fd5b506102886000805160206140b583398151915281565b3480156105c057600080fd5b506102886105cf3660046138a2565b60ff6020526000908152604090205481565b3480156105ed57600080fd5b506102886105fc3660046138a2565b60fe6020526000908152604090205481565b34801561061a57600080fd5b506102886000805160206140d583398151915281565b34801561063c57600080fd5b5061025e61064b366004613921565b6118a8565b34801561065c57600080fd5b5061011154610671906001600160a01b031681565b60405161026a9190613a33565b34801561068a57600080fd5b506104a56118d3565b34801561069f57600080fd5b506102cb61193d565b3480156106b457600080fd5b506102886101085481565b3480156106cb57600080fd5b50610288600081565b3480156106e057600080fd5b506102cb6106ef366004613a47565b611ac2565b34801561070057600080fd5b506102cb611af6565b34801561071557600080fd5b506102cb6107243660046138a2565b611c61565b34801561073557600080fd5b5061028860008051602061417583398151915281565b34801561075757600080fd5b506102cb610766366004613a69565b611cab565b34801561077757600080fd5b506102886107863660046138a2565b6101016020526000908152604090205481565b3480156107a557600080fd5b506102cb611fa4565b3480156107ba57600080fd5b506102886107c93660046138a2565b6101026020526000908152604090205481565b3480156107e857600080fd5b5061010b5461010c5461010d5461010e5461010f546101105461080d95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161026a565b34801561084657600080fd5b506102886000805160206141dc83398151915281565b34801561086857600080fd5b506102cb610877366004613921565b6126bf565b34801561088857600080fd5b5061011254610671906001600160a01b031681565b3480156108a957600080fd5b5061010554610671906001600160a01b031681565b3480156108ca57600080fd5b5061028860008051602061413583398151915281565b3480156108ec57600080fd5b5061010654610671906001600160a01b031681565b34801561090d57600080fd5b5061097061091c3660046138a2565b60fd602052600090815260409020805460018201546002830154600384015460049094015460ff8085169561010086048216956201000081049092169463010000009092046001600160a01b031693919288565b60405161026a989796959493929190613b9a565b60006001600160e01b03198216637965db0b60e01b14806109b557506301ffc9a760e01b6001600160e01b03198316145b92915050565b33600090815260fd6020908152604080832081516101008082018452825460ff80821615158452918104821615159583019590955285949193840191620100009004166006811115610a0f57610a0f613b62565b6006811115610a2057610a20613b62565b81528154630100000090046001600160a01b031660208083019190915260018301546040830152600283015460608301526003830154608083015260049092015460a0909101526000805160206141dc83398151915260009081529081905260008051602061421c833981519152549192506000805160206140f5833981519152919003610ab15760009250505090565b61010654600160a01b900460ff161515600003610ad15760009250505090565b610107548260e0015110610ae85760009250505090565b600082604001516006811115610b0057610b00613b62565b03610b0e5760009250505090565b600080600184604001516006811115610b2957610b29613b62565b03610b555761010b546001840154909250606490610b48906003613c02565b610b529190613c19565b90505b600284604001516006811115610b6d57610b6d613b62565b03610b995761010c546001840154909250606490610b8c906007613c02565b610b969190613c19565b90505b600384604001516006811115610bb157610bb1613b62565b03610bdd5761010d546001840154909250606490610bd090600c613c02565b610bda9190613c19565b90505b600484604001516006811115610bf557610bf5613b62565b03610c215761010e546001840154909250606490610c14906012613c02565b610c1e9190613c19565b90505b600584604001516006811115610c3957610c39613b62565b03610c655761010f546001840154909250606490610c5890601a613c02565b610c629190613c19565b90505b600684604001516006811115610c7d57610c7d613b62565b03610ca957610110546001840154909250606490610c9c906022613c02565b610ca69190613c19565b90505b610cb38282613c19565b94505050505090565b600061010a5461010954610cd09190613c3b565b905090565b610ce06000336118a8565b610d055760405162461bcd60e51b8152600401610cfc90613c4e565b60405180910390fd5b61011180546001600160a01b0319166001600160a01b0392909216919091179055565b610d336000336118a8565b610d4f5760405162461bcd60e51b8152600401610cfc90613c4e565b6001600160a01b038216600090815260fd60205260409020805460ff1615610d895760405162461bcd60e51b8152600401610cfc90613c85565b6001600160a01b038216610daf5760405162461bcd60e51b8152600401610cfc90613cb9565b6001600160a01b038216600090815260fd602052604090205460ff16610de75760405162461bcd60e51b8152600401610cfc90613ce3565b6001600160a01b03821660009081526001602052604090205460ff1615610e205760405162461bcd60e51b8152600401610cfc90613d1a565b61010654600160a01b900460ff1615610e4b5760405162461bcd60e51b8152600401610cfc90613d48565b80546000600280840182905560ff196001600160a01b038616630100000081029190911662ffff01600160b81b031990941693909317600190811762ffff00191661010017855592825260fd60205260408220018054909190610eaf908490613c3b565b9091555082905060005b600f811015610f0257610ecb826126db565b6001600160a01b03918216600090815260fd6020526040902054630100000090049091169080610efa81613d75565b915050610eb9565b50826001600160a01b0316846001600160a01b03166000805160206141fc83398151915260405160405180910390a350505050565b60009081526067602052604090206001015490565b610f5582610f37565b610f5e81612e94565b610f688383612e9e565b505050565b6001600160a01b0381163314610fdd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cfc565b610fe78282612f24565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110335760405162461bcd60e51b8152600401610cfc90613d8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611065612f8b565b6001600160a01b03161461108b5760405162461bcd60e51b8152600401610cfc90613dc8565b61109481612fa7565b604080516000808252602082019092526110b09183919061300b565b50565b6110be6000336118a8565b6110da5760405162461bcd60e51b8152600401610cfc90613c4e565b336001600160a01b038216036111325760405162461bcd60e51b815260206004820152601d60248201527f596f752063616e6e6f7420626c61636b6c69737420796f757273656c660000006044820152606401610cfc565b6001600160a01b0381166111925760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f7420626c61636b6c6973742061646472657373207a65726044820152606f60f81b6064820152608401610cfc565b6111bd816001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6040516001600160a01b038216907fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85590600090a250565b6111ff6000336118a8565b8061121d575061121d6000805160206140d5833981519152336118a8565b6112395760405162461bcd60e51b8152600401610cfc90613c4e565b61010654600160a01b900460ff16156112865760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b6044820152606401610cfc565b610106805460ff60a01b1916600160a01b17905542610107556000805160206141dc83398151915260009081526020526000805160206140f5833981519152805460008051602061421c8339815191528190556112e39080613e02565b81556101115460408051634237ea8d60e01b815290516001600160a01b0390921691634237ea8d9160048082019260009290919082900301818387803b15801561132c57600080fd5b505af1158015611340573d6000803e3d6000fd5b50506040514292507fe937b2648ad52d1aaf4f7765235791fc9a2fbe11dae61f84bc9f4f2dca491ee89150600090a250565b3360009081526001602081905260409091205460ff16151590036113a85760405162461bcd60e51b8152600401610cfc90613e15565b60006113b2610cbc565b33600090815260fd6020526040902090915034821461140e5760405162461bcd60e51b8152602060048201526018602482015277556e6d6174636820526567697374726174696f6e2046656560401b6044820152606401610cfc565b805460ff16156114305760405162461bcd60e51b8152600401610cfc90613c85565b6001600160a01b0383166114565760405162461bcd60e51b8152600401610cfc90613cb9565b6001600160a01b038316600090815260fd602052604090205460ff1661148e5760405162461bcd60e51b8152600401610cfc90613ce3565b6001600160a01b03831660009081526001602052604090205460ff16156114c75760405162461bcd60e51b8152600401610cfc90613d1a565b61010654600160a01b900460ff16156114f25760405162461bcd60e51b8152600401610cfc90613d48565b805462ff000019600162ffff01600160b81b031990921663010000006001600160a01b03871690810260ff19169190911783179190911683556000600280850182905591815260fd602052604081209091018054909190611554908490613c3b565b90915550506101095461156690613176565b600061157461010a546131bb565b90506000606461010a54601161158a9190613c02565b6115949190613c19565b905061159f8161334f565b6115a98183613e02565b91506000606461010a5460036115bf9190613c02565b6115c99190613c19565b610106546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611605573d6000803e3d6000fd5b506116108184613e02565b610105546001600160a01b0316600090815260fe6020526040812080549295508592909190611640908490613c3b565b90915550506040516001600160a01b0387169033906000805160206141fc83398151915290600090a3505050505050565b611679613849565b506000805160206141dc83398151915260009081526020908152604080518082019091526000805160206140f583398151915254815260008051602061421c833981519152549181019190915290565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036117115760405162461bcd60e51b8152600401610cfc90613d8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611743612f8b565b6001600160a01b0316146117695760405162461bcd60e51b8152600401610cfc90613dc8565b61177282612fa7565b610fe78282600161300b565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118195760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610cfc565b5060008051602061415583398151915290565b611834613849565b5060008051602061417583398151915260009081526020908152604080518082019091527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cda95481527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cdaa549181019190915290565b60009182526067602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6118db613849565b506000805160206140b583398151915260009081526020908152604080518082019091526000805160206141958339815191525481527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9076549181019190915290565b6119486000336118a8565b8061196657506119666000805160206140d5833981519152336118a8565b6119825760405162461bcd60e51b8152600401610cfc90613c4e565b61010654600160a01b900460ff166119d65760405162461bcd60e51b815260206004820152601760248201527614985b9ac81c995dd85c99081b9bdd081cdd185c9d1959604a1b6044820152606401610cfc565b610106805460ff60a01b191690556000805160206141dc8339815191526000908152602081905260008051602061421c833981519152546000805160206140f5833981519152805490928391611a2d908490613c3b565b909155505060006001820181905561011154604080516398d41efb60e01b815290516001600160a01b03909216926398d41efb9260048084019382900301818387803b158015611a7c57600080fd5b505af1158015611a90573d6000803e3d6000fd5b50506040514292507fa5ea49deceab9e6efacd9ebadc91dfd0d3eb98a2aeb02da350b84dd58c1b3b689150600090a250565b611acd6000336118a8565b611ae95760405162461bcd60e51b8152600401610cfc90613c4e565b6101099190915561010a55565b3360009081526001602081905260409091205460ff1615159003611b2c5760405162461bcd60e51b8152600401610cfc90613e15565b33600090815260fe602052604090205480611b835760405162461bcd60e51b8152602060048201526017602482015276139bc81c995dd85c99081d1bc818994818db185a5b5959604a1b6044820152606401610cfc565b60006064611b9283600a613c02565b611b9c9190613c19565b610105546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611bd8573d6000803e3d6000fd5b50336108fc611be78385613e02565b6040518115909202916000818181858888f19350505050158015611c0f573d6000803e3d6000fd5b5033600081815260fe60205260408120557fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e611c4b8385613e02565b6040519081526020015b60405180910390a25050565b611c6c6000336118a8565b611c885760405162461bcd60e51b8152600401610cfc90613c4e565b61011280546001600160a01b0319166001600160a01b0392909216919091179055565b600254610100900460ff1615808015611ccb5750600254600160ff909116105b80611cec5750611cda3061338b565b158015611cec575060025460ff166001145b611d4f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cfc565b6002805460ff191660011790558015611d72576002805461ff0019166101001790555b611d7a61339a565b611d8261339a565b611d8d600033612e9e565b611da560008051602061413583398151915233612e9e565b611db0600088612e9e565b436101085561010983905561010a82905561010580546001600160a01b038088166001600160a01b03199283168117909355610106805491881691909216179055600081815260fd6020526040808220805462ffff01600160b81b0319166001179055519091906000805160206141fc833981519152908390a36001600160a01b03808516600090815260fd6020526040808220805462ffff01600160b81b03191660011790555190918716906000805160206141fc833981519152908390a36000805b8751811015611f53576000888281518110611e9157611e91613e42565b6020908102919091018101516001600160a01b038116600090815260fd9092526040909120805460ff191660019081179091558a5191925090611ed5908490613e02565b611edf9190613e02565b6001600160a01b03828116600081815260fd60205260408082206001808201969096556002810195909555845462010000600160b81b0319166301000000948916948502179094559251919290916000805160206141fc8339815191529190a3915080611f4b81613d75565b915050611e74565b50508015611f9b576002805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b3360009081526001602081905260409091205460ff1615159003611fda5760405162461bcd60e51b8152600401610cfc90613e15565b6000611fe46109bb565b610111546040516383aea64560e01b81529192506000916001600160a01b03909116906383aea6459061201b903390600401613a33565b602060405180830381865afa158015612038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205c9190613e58565b33600090815260fd60205260409020909150826120b65760405162461bcd60e51b8152602060048201526018602482015277139bc814995dd85c990818d85b8818994818db185a5b595960421b6044820152606401610cfc565b6001815462010000900460ff1660068111156120d4576120d4613b62565b036121875761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190613e71565b61215c90600a613f78565b6121689061c350613c02565b8210156121875760405162461bcd60e51b8152600401610cfc90613f87565b6002815462010000900460ff1660068111156121a5576121a5613b62565b036122595761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190613e71565b61222d90600a613f78565b61223a9062030d40613c02565b8210156122595760405162461bcd60e51b8152600401610cfc90613f87565b6003815462010000900460ff16600681111561227757612277613b62565b0361232b5761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190613e71565b6122ff90600a613f78565b61230c90620f4240613c02565b82101561232b5760405162461bcd60e51b8152600401610cfc90613f87565b6004815462010000900460ff16600681111561234957612349613b62565b036123fd5761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c69190613e71565b6123d190600a613f78565b6123de90624c4b40613c02565b8210156123fd5760405162461bcd60e51b8152600401610cfc90613f87565b6005815462010000900460ff16600681111561241b5761241b613b62565b036124d05761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190613e71565b6124a390600a613f78565b6124b19063017d7840613c02565b8210156124d05760405162461bcd60e51b8152600401610cfc90613f87565b6006815462010000900460ff1660068111156124ee576124ee613b62565b036125a35761011260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b9190613e71565b61257690600a613f78565b612584906305f5e100613c02565b8210156125a35760405162461bcd60e51b8152600401610cfc90613f87565b600060646125b285600a613c02565b6125bc9190613c19565b610105546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125f8573d6000803e3d6000fd5b50336108fc6126078387613e02565b6040518115909202916000818181858888f1935050505015801561262f573d6000803e3d6000fd5b504260048301556000805160206141dc8339815191526000908152602081905260008051602061421c83398151915280546000805160206140f58339815191529287929161267e908490613e02565b909155505060405185815233907feff26bb1aaac7ce27452afaf8402dbd160686540ece1c14d857cf0c272b5cba49060200160405180910390a25050505050565b6126c882610f37565b6126d181612e94565b610f688383612f24565b6001600160a01b038116600090815260fd60205260408120600180820180549293919290919061270c908490613c3b565b9091555060069050815462010000900460ff16600681111561273057612730613b62565b03612739575050565b61fa0081600101541015801561276a57506005815462010000900460ff16600681111561276857612768613b62565b145b15612865576001600160a01b0382166000908152610104602090815260408083205461010390925282205461279f9190613c3b565b90506002811061285f57815462ff000019166206000017825561010f8054600191906000906127cf908490613e02565b90915550506101108054600191906000906127eb908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010360205260408120805460019290612822908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010460205260408120805460019290612859908490613c3b565b90915550505b50612e4f565b613e8081600101541015801561289657506004815462010000900460ff16600681111561289457612894613b62565b145b1561299a576001600160a01b038216600090815261010460209081526040808320546101038352818420546101029093529083205490916128d691613c3b565b6128e09190613c3b565b90506002811061285f57815462ff000019166205000017825561010e805460019190600090612910908490613e02565b909155505061010f80546001919060009061292c908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010260205260408120805460019290612963908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010360205260408120805460019290612859908490613c3b565b6119008160010154101580156129cb57506003815462010000900460ff1660068111156129c9576129c9613b62565b145b15612ae2576001600160a01b03821660009081526101046020908152604080832054610103835281842054610102845282852054610101909452918420549092612a1491613c3b565b612a1e9190613c3b565b612a289190613c3b565b90506002811061285f57815462ff000019166204000017825561010d805460019190600090612a58908490613e02565b909155505061010e805460019190600090612a74908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010160205260408120805460019290612aab908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010260205260408120805460019290612859908490613c3b565b610640816001015410158015612b1357506002815462010000900460ff166006811115612b1157612b11613b62565b145b15612c41576001600160a01b03821660009081526101046020908152604080832054610103835281842054610102845282852054610101855283862054610100909552928520549193909291612b699190613c3b565b612b739190613c3b565b612b7d9190613c3b565b612b879190613c3b565b90506002811061285f57815462ff000019166203000017825561010c805460019190600090612bb7908490613e02565b909155505061010d805460019190600090612bd3908490613c3b565b90915550508154630100000090046001600160a01b0316600090815261010060205260408120805460019290612c0a908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010160205260408120805460019290612859908490613c3b565b610190816001015410158015612c7257506001815462010000900460ff166006811115612c7057612c70613b62565b145b15612db3576001600160a01b0382166000908152610104602090815260408083205461010383528184205461010284528285205461010185528386205461010086528487205460ff909652938620549294919390929091612cd291613c3b565b612cdc9190613c3b565b612ce69190613c3b565b612cf09190613c3b565b612cfa9190613c3b565b90506002811061285f57815462ff000019166202000017825561010b805460019190600090612d2a908490613e02565b909155505061010c805460019190600090612d46908490613c3b565b90915550508154630100000090046001600160a01b0316600090815260ff60205260408120805460019290612d7c908490613e02565b90915550508154630100000090046001600160a01b0316600090815261010060205260408120805460019290612859908490613c3b565b6064816001015410158015612de357506000815462010000900460ff166006811115612de157612de1613b62565b145b15610fe757805462ff000019166201000017815561010b805460019190600090612e0e908490613c3b565b90915550508054630100000090046001600160a01b0316600090815260ff60205260408120805460019290612e44908490613c3b565b90915550612e4f9050565b80546040516001600160a01b038416917fc044cb19a6b2fe37c1a0618f3a47a874033707b4034762c63477d77c5556e22e91611c559162010000900460ff1690613fad565b6110b08133613407565b612ea882826118a8565b610fe75760008281526067602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ee03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612f2e82826118a8565b15610fe75760008281526067602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020614155833981519152546001600160a01b031690565b612fbf600080516020614135833981519152336118a8565b6110b05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792055504752414445522063616e20706572666f726d20616374696f6e6044820152606401610cfc565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561303e57610f6883613460565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613098575060408051601f3d908101601f1916820190925261309591810190613e58565b60015b6130fb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610cfc565b600080516020614155833981519152811461316a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610cfc565b50610f688383836134fa565b6000805160206140b5833981519152600090815260208190526000805160206141958339815191528054909183918391906131b2908490613c3b565b90915550505050565b33600090815260fd6020908152604080832081516101e081018352601e81526008938101939093526003918301919091526002606083018190526080830152600160a0830181905260c0830181905260e08301819052610100830181905261012083018190526101408301819052610160830181905261018083018190526101a083018190526101c08301528391829190845b600f811015613344578254630100000090046001600160a01b0316806132745750613344565b6001600160a01b03811660009081526001602052604081205460ff1615159003613319576132a1816126db565b60008383600f81106132b5576132b5613e42565b602002015160ff169050600060646132cd838a613c02565b6132d79190613c19565b6001600160a01b038416600090815260fe6020526040812080549293508392909190613304908490613c3b565b9091555061331490508188613e02565b965050505b6001600160a01b0316600090815260fd6020526040902092508061333c81613d75565b91505061324e565b509195945050505050565b6000805160206141dc833981519152600090815260208190526000805160206140f58339815191528054909183918391906131b2908490613c3b565b6001600160a01b03163b151590565b600254610100900460ff166134055760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610cfc565b565b61341182826118a8565b610fe75761341e81613525565b613429836020613537565b60405160200161343a929190613fdf565b60408051601f198184030181529082905262461bcd60e51b8252610cfc9160040161404e565b6134698161338b565b6134cb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610cfc565b60008051602061415583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613503836136d9565b6000825111806135105750805b15610f685761351f8383613719565b50505050565b60606109b56001600160a01b03831660145b60606000613546836002613c02565b613551906002613c3b565b6001600160401b0381111561356857613568613946565b6040519080825280601f01601f191660200182016040528015613592576020820181803683370190505b509050600360fc1b816000815181106135ad576135ad613e42565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106135dc576135dc613e42565b60200101906001600160f81b031916908160001a9053506000613600846002613c02565b61360b906001613c3b565b90505b6001811115613683576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061363f5761363f613e42565b1a60f81b82828151811061365557613655613e42565b60200101906001600160f81b031916908160001a90535060049490941c9361367c81614081565b905061360e565b5083156136d25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cfc565b9392505050565b6136e281613460565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606137248361338b565b61377f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610cfc565b600080846001600160a01b03168460405161379a9190614098565b600060405180830381855af49150503d80600081146137d5576040519150601f19603f3d011682016040523d82523d6000602084013e6137da565b606091505b509150915061380282826040518060600160405280602781526020016141b56027913961380b565b95945050505050565b6060831561381a5750816136d2565b6136d2838381511561382f5781518083602001fd5b8060405162461bcd60e51b8152600401610cfc919061404e565b604051806040016040528060008152602001600081525090565b60006020828403121561387557600080fd5b81356001600160e01b0319811681146136d257600080fd5b6001600160a01b03811681146110b057600080fd5b6000602082840312156138b457600080fd5b81356136d28161388d565b6000602082840312156138d157600080fd5b5035919050565b80356138e38161388d565b919050565b600080604083850312156138fb57600080fd5b82356139068161388d565b915060208301356139168161388d565b809150509250929050565b6000806040838503121561393457600080fd5b8235915060208301356139168161388d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561398457613984613946565b604052919050565b6000806040838503121561399f57600080fd5b82356139aa8161388d565b91506020838101356001600160401b03808211156139c757600080fd5b818601915086601f8301126139db57600080fd5b8135818111156139ed576139ed613946565b6139ff601f8201601f1916850161395c565b91508082528784828501011115613a1557600080fd5b80848401858401376000848284010152508093505050509250929050565b6001600160a01b0391909116815260200190565b60008060408385031215613a5a57600080fd5b50508035926020909101359150565b60008060008060008060c08789031215613a8257600080fd5b8635613a8d8161388d565b95506020878101356001600160401b0380821115613aaa57600080fd5b818a0191508a601f830112613abe57600080fd5b813581811115613ad057613ad0613946565b8060051b9150613ae184830161395c565b818152918301840191848101908d841115613afb57600080fd5b938501935b83851015613b255784359250613b158361388d565b8282529385019390850190613b00565b809a50505050505050613b3a604088016138d8565b9350613b48606088016138d8565b92506080870135915060a087013590509295509295509295565b634e487b7160e01b600052602160045260246000fd5b60078110613b9657634e487b7160e01b600052602160045260246000fd5b9052565b881515815287151560208201526101008101613bb96040830189613b78565b6001600160a01b03969096166060820152608081019490945260a084019290925260c083015260e0909101529392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b5576109b5613bec565b600082613c3657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109b5576109b5613bec565b6020808252601d908201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e000000604082015260600190565b6020808252601a90820152791059191c995cdcc8185b1c9958591e481c9959da5cdd195c995960321b604082015260600190565b60208082526010908201526f24b73b30b634b2103932b332b93932b960811b604082015260600190565b6020808252601d908201527f52656665727265722073686f756c642062652072656769737465726564000000604082015260600190565b602080825260149082015273149959995c9c995c88189b1858dadb1a5cdd195960621b604082015260600190565b602080825260139082015272149959da5cdd1c985d1a5bdb8818db1bdcd959606a1b604082015260600190565b600060018201613d8757613d87613bec565b5060010190565b6020808252602c9082015260008051602061411583398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061411583398151915260408201526b6163746976652070726f787960a01b606082015260800190565b818103818111156109b5576109b5613bec565b6020808252601390820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613e6a57600080fd5b5051919050565b600060208284031215613e8357600080fd5b815160ff811681146136d257600080fd5b600181815b80851115613ecf578160001904821115613eb557613eb5613bec565b80851615613ec257918102915b93841c9390800290613e99565b509250929050565b600082613ee6575060016109b5565b81613ef3575060006109b5565b8160018114613f095760028114613f1357613f2f565b60019150506109b5565b60ff841115613f2457613f24613bec565b50506001821b6109b5565b5060208310610133831016604e8410600b8410161715613f52575081810a6109b5565b613f5c8383613e94565b8060001904821115613f7057613f70613bec565b029392505050565b60006136d260ff841683613ed7565b6020808252600c908201526b4e6f7420456c696769626c6560a01b604082015260600190565b602081016109b58284613b78565b60005b83811015613fd6578181015183820152602001613fbe565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614011816017850160208801613fbb565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614042816028840160208801613fbb565b01602801949350505050565b602081526000825180602084015261406d816040850160208701613fbb565b601f01601f19169190910160400192915050565b60008161409057614090613bec565b506000190190565b600082516140aa818460208701613fbb565b919091019291505056feef78ff2707f55cf683ecba27f753a1f73d88a2972299daeedcdcce2c52b7821d5620a1113a72b02a617976b3f6b15600dd7a8b3a916a9ca01e23119d989a0543335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c046756e6374696f6e206d7573742062652063616c6c6564207468726f75676820189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc791b07db9f5ba47b7333684f8aab1753657d4cf52dbb1ca2e58c7c7643deb25ce48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9075416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644caf09f7dd9cf5930a0d30d4dba10a4d06c1e6d90491f8198b355f99152771b02a4f530ae55f002aac4686b649762fc68e96bd8b80ac835b41777145c94e1f8a335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c1a264697066735822122091cc95c0fe28f586592b7b39e8bc6c987a146b2b32f729327ae83a85055b37f264736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
