{
  "_format": "hh-sol-artifact-1",
  "contractName": "IdentityV4",
  "sourceName": "contracts/identity/IdentityV4.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connected",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "AccountConnected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "disconnected",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        }
      ],
      "name": "AccountDisconnected",
      "type": "event"
    },
    {
      "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": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "WhitelistedAuthenticated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IDENTITY_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TYPED_STRUCTURE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addBlacklisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addWhitelisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "name": "addWhitelistedWithDID",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "orgChain",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "dateAuthenticated",
          "type": "uint256"
        }
      ],
      "name": "addWhitelistedWithDIDAndChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addrToDID",
      "outputs": [
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "authenticate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "authenticateWithTimestamp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authenticationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "connectAccount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "connectedAccounts",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dao",
      "outputs": [
        {
          "internalType": "contract Controller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "didHashToAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "connected",
          "type": "address"
        }
      ],
      "name": "disconnectAccount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getWhitelistedOnChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getWhitelistedRoot",
      "outputs": [
        {
          "internalType": "address",
          "name": "whitelisted",
          "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": "",
          "type": "address"
        }
      ],
      "name": "identities",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "dateAuthenticated",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "dateAdded",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "whitelistedOnChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "status",
          "type": "uint8"
        },
        {
          "internalType": "uint32",
          "name": "authCount",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_ns",
          "type": "address"
        }
      ],
      "name": "initDAO",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_oldIdentity",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isDAOContract",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "lastAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract IGoodDollar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oldIdentity",
      "outputs": [
        {
          "internalType": "contract IIdentity",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "toPause",
          "type": "bool"
        }
      ],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeBlacklisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeWhitelisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceWhitelisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "reverifyDaysOptions",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "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": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "name": "setDID",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8[]",
          "name": "options",
          "type": "uint8[]"
        }
      ],
      "name": "setReverifyDaysOptions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "daysSinceAuth",
          "type": "uint256"
        }
      ],
      "name": "shouldReverify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateAvatar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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"
    },
    {
      "inputs": [],
      "name": "whitelistedContracts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "whitelistedCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161403d61004c60003960008181610e2d01528181610e6d015281816113cc0152818161140c0152611484015261403d6000f3fe6080604052600436106102655760003560e01c806301ffc9a71461026a57806302329a291461029f57806308e0d29d146102c157806310154bad146102e1578063188efc16146103015780631aaff63c146103215780631b027099146103515780631b3c90a8146103715780632236684414610386578063248a9ca31461039a578063291d9549146103ba5780632b14dda8146103da5780632cec5330146103fa5780632d0e9b461461041c5780632f2ff15d1461044957806331b376e21461046957806336568abe1461047e5780633659cfe61461049e57806337a1a987146104be5780633af32abf146104de5780633e6326fc146104fe5780634125f0f21461051e5780634162169f1461053f578063485cc9551461055f5780634a03813f1461057f5780634f1ef2861461059f57806352d1902d146105b257806354f9f7a3146105c75780635aef7de6146105e75780635c975abb146106075780635f539d6914610620578063613200401461064057806367c759371461067757806391d14854146106ae578063925e8c1a146106ce57806396a1ef79146106ee578063a061922d1461070e578063a217fddf1461072e578063b2a1de2214610743578063b30f7e7f1461075a578063c375c2ef14610771578063c6a276c214610791578063c73cc4ae146107b1578063cadef5ac146107d1578063d21685f414610806578063d326281614610826578063d547741f14610846578063d6cd947314610866578063e1758bd81461087b578063e1e360ba14610890578063e63ab1e9146108b0578063e737031a146108d2578063f653b81e146108f2578063fe575a8714610924575b600080fd5b34801561027657600080fd5b5061028a610285366004613546565b610944565b60405190151581526020015b60405180910390f35b3480156102ab57600080fd5b506102bf6102ba36600461357e565b61097b565b005b3480156102cd57600080fd5b506102bf6102dc3660046135b0565b6109ad565b3480156102ed57600080fd5b506102bf6102fc3660046135b0565b6109ba565b34801561030d57600080fd5b506102bf61031c3660046135b0565b6109e4565b34801561032d57600080fd5b50610343600080516020613f1a83398151915281565b604051908152602001610296565b34801561035d57600080fd5b506102bf61036c366004613698565b610a5e565b34801561037d57600080fd5b506102bf610a8e565b34801561039257600080fd5b50600161028a565b3480156103a657600080fd5b506103436103b53660046136e7565b610bb5565b3480156103c657600080fd5b506102bf6103d53660046135b0565b610bca565b3480156103e657600080fd5b506102bf6103f53660046135b0565b610bf3565b34801561040657600080fd5b5061040f610cbd565b6040516102969190613750565b34801561042857600080fd5b5061043c6104373660046135b0565b610cd9565b6040516102969190613763565b34801561045557600080fd5b506102bf610464366004613777565b610d3f565b34801561047557600080fd5b50610343610d5b565b34801561048a57600080fd5b506102bf610499366004613777565b610da9565b3480156104aa57600080fd5b506102bf6104b93660046135b0565b610e23565b3480156104ca57600080fd5b506102bf6104d93660046135b0565b610ee8565b3480156104ea57600080fd5b5061028a6104f93660046135b0565b610fa6565b34801561050a57600080fd5b5060675461043c906001600160a01b031681565b34801561052a57600080fd5b5061019c5461043c906001600160a01b031681565b34801561054b57600080fd5b5060655461043c906001600160a01b031681565b34801561056b57600080fd5b506102bf61057a3660046137a7565b6110b0565b34801561058b57600080fd5b5061028a61059a3660046137d5565b611318565b6102bf6105ad366004613801565b6113c2565b3480156105be57600080fd5b50610343611477565b3480156105d357600080fd5b5061040f6105e23660046135b0565b611525565b3480156105f357600080fd5b5060665461043c906001600160a01b031681565b34801561061357600080fd5b506101305460ff1661028a565b34801561062c57600080fd5b506102bf61063b3660046135b0565b6116b9565b34801561064c57600080fd5b5061043c61065b3660046135b0565b61019b602052600090815260409020546001600160a01b031681565b34801561068357600080fd5b5061043c6106923660046136e7565b61019a602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061028a6106c9366004613777565b611782565b3480156106da57600080fd5b506102bf6106e936600461385a565b6117ad565b3480156106fa57600080fd5b506102bf6107093660046137d5565b61194b565b34801561071a57600080fd5b506103436107293660046135b0565b611b6c565b34801561073a57600080fd5b50610343600081565b34801561074f57600080fd5b506103436101965481565b34801561076657600080fd5b506103436101975481565b34801561077d57600080fd5b506102bf61078c3660046135b0565b611b99565b34801561079d57600080fd5b506102bf6107ac3660046135b0565b611ceb565b3480156107bd57600080fd5b5061028a6107cc3660046135b0565b611e4a565b3480156107dd57600080fd5b506107f16107ec3660046136e7565b611f01565b60405163ffffffff9091168152602001610296565b34801561081257600080fd5b506102bf6108213660046135b0565b611f3c565b34801561083257600080fd5b506102bf6108413660046138ce565b612070565b34801561085257600080fd5b506102bf610861366004613777565b612117565b34801561087257600080fd5b506102bf612133565b34801561088757600080fd5b5061043c61216b565b34801561089c57600080fd5b506103436108ab3660046135b0565b6121f8565b3480156108bc57600080fd5b50610343600080516020613f5a83398151915281565b3480156108de57600080fd5b506102bf6108ed366004613952565b6122ad565b3480156108fe57600080fd5b5061091261090d3660046135b0565b612302565b604051610296969594939291906139b1565b34801561093057600080fd5b5061028a61093f3660046135b0565b6123ca565b60006001600160e01b03198216637965db0b60e01b148061097557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020613f5a8339815191526109938161243d565b81156109a5576109a1612447565b5050565b6109a161249c565b6109b7814261194b565b50565b600080516020613f1a8339815191526109d28161243d565b6109da6124d6565b6109a1824661251d565b600080516020613f1a8339815191526109fc8161243d565b610a046124d6565b610a0d8261264a565b6001600160a01b03821660008181526101996020526040808220600401805460ff191660ff179055517f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b8789679190a25050565b600080516020613f1a833981519152610a768161243d565b610a7e6124d6565b610a89838346612923565b505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1591906139f7565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9391906139f7565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600090815260fe602052604090206001015490565b600080516020613f1a833981519152610be28161243d565b610bea6124d6565b6109a18261264a565b6000610bfe8161243d565b6067546001600160a01b031615610c525760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b610c5b826129be565b606654610c73906000906001600160a01b03166129e1565b606654610c9890600080516020613f5a833981519152906001600160a01b03166129e1565b6066546109a190600080516020613f1a833981519152906001600160a01b03166129e1565b604051806080016040528060478152602001613f9a6047913981565b6000610ce482610fa6565b15610ced575090565b6001600160a01b03808316600090815261019b6020526040902054610d129116610fa6565b15610d3757506001600160a01b03908116600090815261019b60205260409020541690565b506000919050565b610d4882610bb5565b610d518161243d565b610a8983836129e7565b61019d805460009190610d7090600190613a2a565b81548110610d8057610d80613a3d565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16919050565b6001600160a01b0381163314610e195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c49565b6109a18282612a6d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e6b5760405162461bcd60e51b8152600401610c4990613a53565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e9d612ad4565b6001600160a01b031614610ec35760405162461bcd60e51b8152600401610c4990613a8d565b610ecc81612af0565b604080516000808252602082019092526109b791839190612af8565b6001600160a01b03818116600090815261019b602052604090205416331480610f195750336001600160a01b038216145b610f545760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b6044820152606401610c49565b6001600160a01b038116600081815261019b602052604080822080546001600160a01b0319169055513392917f7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d291a350565b6001600160a01b0381166000908152610199602052604081205481906201518090610fd19042613a2a565b610fdb9190613ac7565b6001600160a01b0384166000908152610199602052604090206004015490915060ff166001036110175761100f8382611318565b159392505050565b61019c546001600160a01b0316156110a75761019c54604051633af32abf60e01b81526001600160a01b0390911690633af32abf9061105a908690600401613763565b602060405180830381865afa925050508015611093575060408051601f3d908101601f1916820190925261109091810190613ae9565b60015b6110a05750600092915050565b9392505050565b50600092915050565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110f157506110df30612c63565b1580156110f1575060005460ff166001145b6111545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c49565b6000805460ff191660011790558015611177576000805461ff0019166101001790555b61117f612c72565b611187612c99565b6111ce604051806040016040528060088152602001674964656e7469747960c01b815250604051806040016040528060058152602001640312e302e360dc1b815250612ccd565b6111d96000846129e1565b6111f1600080516020613f5a833981519152846129e1565b611209600080516020613f1a833981519152846129e1565b61019c80546001600160a01b0384166001600160a01b031990911617905561019d805460018181018355600083905260088083047f71880bb8535eda3be1bc3614789b84ba72ab02d5ae26ba282fa1178bb7fea1e6908101805463ffffffff60046007978816810261010090810a8381021990941690931790935587548087018955858104850180549189168502840a808a0290840219909216919091179055875495860190975592840490910180549390941602900a60b48102930219169190911790558015610a89576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b0382166000908152610199602052604081206004810154905461010090910463ffffffff16906369a937e611156113635761019d5461136090600190613a2a565b90505b600061019d8263ffffffff168154811061137f5761137f613a3d565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1690508084106113b757600192505050610975565b506000949350505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361140a5760405162461bcd60e51b8152600401610c4990613a53565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661143c612ad4565b6001600160a01b0316146114625760405162461bcd60e51b8152600401610c4990613a8d565b61146b82612af0565b6109a182826001612af8565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115125760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610c49565b50600080516020613f7a83398151915290565b6001600160a01b03811660009081526101996020526040902060020180546060919061155090613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461157c90613b06565b80156115c95780601f1061159e576101008083540402835291602001916115c9565b820191906000526020600020905b8154815290600101906020018083116115ac57829003601f168201915b50508351602080860191909120600081815261019a909252604090912054949550936001600160a01b0380881691160392506116089150505750919050565b61019c546001600160a01b0316156116a35761019c546040516354f9f7a360e01b81526001600160a01b03909116906354f9f7a39061164b908690600401613763565b600060405180830381865afa92505050801561168957506040513d6000823e601f3d908101601f191682016040526116869190810190613b40565b60015b6110a0575050604080516020810190915260008152919050565b5050604080516020810190915260008152919050565b600080516020613f1a8339815191526116d18161243d565b6116d96124d6565b813b6117275760405162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e7472616374006044820152606401610c49565b611731824661251d565b6001600160a01b03821660008181526101996020526040808220600401805460ff19166002179055517f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e2059190a25050565b600091825260fe602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613f1a8339815191526117c58161243d565b816118025760405162461bcd60e51b815260206004820152600d60248201526c656d707479206f7074696f6e7360981b6044820152606401610c49565b61180f61019d60006134d2565b60005b82811015611945578015806118825750838361182f600184613a2a565b81811061183e5761183e613a3d565b90506020020160208101906118539190613bad565b60ff1684848381811061186857611868613a3d565b905060200201602081019061187d9190613bad565b60ff16115b6118ce5760405162461bcd60e51b815260206004820152601e60248201527f6f7074696f6e73206e6f7420696e20617363656e64696e67206f7264657200006044820152606401610c49565b61019d8484838181106118e3576118e3613a3d565b90506020020160208101906118f89190613bad565b8154600181018355600092835260209092206008830401805463ffffffff60079094166004026101000a938402191660ff929092169092021790558061193d81613bd0565b915050611812565b50505050565b600080516020613f1a8339815191526119638161243d565b61196b6124d6565b6001600160a01b0383166000908152610199602052604090206004015460ff166001146119aa5760405162461bcd60e51b8152600401610c4990613be9565b6001600160a01b0383166000908152610199602052604081205462015180906119d39085613a2a565b6119dd9190613ac7565b6001600160a01b038516600090815261019960205260409020549091506369a937e61115611a515761019d54611a1590600190613a2a565b6001600160a01b038516600090815261019960205260409020600401805463ffffffff929092166101000264ffffffff00199092169190911790555b611a5b8482611318565b15611b10576001600160a01b0384166000908152610199602052604090206004018054600191908290611a9a908290610100900463ffffffff16613c12565b825463ffffffff91821661010093840a908102908302199091161790925561019d546001600160a01b0388166000908152610199602052604090206004015491909104909116109050611b10576001600160a01b038416600090815261019960205260409020600401805464ffffffff00191690555b6001600160a01b0384166000818152610199602052604090819020859055517fb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f50090611b5e9086815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152610199602052604090206003015480611b945746610975565b919050565b600080516020613f1a833981519152611bb18161243d565b611bb96124d6565b61019c546001600160a01b031615801590611c41575061019c5460405163639e625760e11b81526001600160a01b039091169063c73cc4ae90611c00908590600401613763565b602060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c419190613ae9565b15611caa5761019c5460405163c375c2ef60e01b81526001600160a01b039091169063c375c2ef90611c77908590600401613763565b600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050505b611cb38261264a565b6040516001600160a01b038316907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a25050565b600080516020613f1a833981519152611d038161243d565b611d0b6124d6565b61019c546001600160a01b031615801590611d93575061019c5460405163fe575a8760e01b81526001600160a01b039091169063fe575a8790611d52908590600401613763565b602060405180830381865afa158015611d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d939190613ae9565b15611dfc5761019c546040516363513b6160e11b81526001600160a01b039091169063c6a276c290611dc9908590600401613763565b600060405180830381600087803b158015611de357600080fd5b505af1158015611df7573d6000803e3d6000fd5b505050505b6001600160a01b03821660008181526101996020526040808220600401805460ff19169055517f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde89190a25050565b6001600160a01b0381166000908152610199602052604081206004015460ff16600203611e7957506001919050565b61019c546001600160a01b031615610d375761019c5460405163639e625760e11b81526001600160a01b039091169063c73cc4ae90611ebc908590600401613763565b602060405180830381865afa925050508015611ef5575060408051601f3d908101601f19168201909252611ef291810190613ae9565b60015b61097557506000919050565b61019d8181548110611f1257600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b611f4533610fa6565b611f615760405162461bcd60e51b8152600401610c4990613be9565b611f6a81610fa6565b158015611f7d5750611f7b816123ca565b155b611fbb5760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a59081858d8dbdd5b9d608a1b6044820152606401610c49565b6001600160a01b03818116600090815261019b602052604090205416156120185760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb9b9958dd1959607a1b6044820152606401610c49565b6001600160a01b038116600081815261019b602052604080822080546001600160a01b0319163390811790915590519092917f18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c91a350565b336001600160a01b038416148061209a575061209a600080516020613f1a83398151915233611782565b6120d75760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c49565b610a898383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d1092505050565b61212082610bb5565b6121298161243d565b610a898383612a6d565b61213b6124d6565b61214433610fa6565b6121605760405162461bcd60e51b8152600401610c4990613be9565b6121693361264a565b565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f391906139f7565b905090565b6001600160a01b038116600090815261019960205260408120541561223457506001600160a01b03166000908152610199602052604090205490565b61019c546001600160a01b031615610d375761019c546040516370f1b05d60e11b81526001600160a01b039091169063e1e360ba90612277908590600401613763565b602060405180830381865afa925050508015611ef5575060408051601f3d908101601f19168201909252611ef291810190613c36565b600080516020613f1a8339815191526122c58161243d565b6122cd6124d6565b6122d8858585612923565b81156122fb576001600160a01b0385166000908152610199602052604090208290555b5050505050565b610199602052600090815260409020805460018201546002830180549293919261232b90613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461235790613b06565b80156123a45780601f10612379576101008083540402835291602001916123a4565b820191906000526020600020905b81548152906001019060200180831161238757829003601f168201915b50505050600383015460049093015491929160ff81169150610100900463ffffffff1686565b6001600160a01b0381166000908152610199602052604081206004015460ff90811690036123fa57506001919050565b61019c546001600160a01b031615610d375761019c5460405163fe575a8760e01b81526001600160a01b039091169063fe575a8790611ebc908590600401613763565b6109b78133612f90565b61244f6124d6565b610130805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124853390565b6040516124929190613763565b60405180910390a1565b6124a4612fe9565b610130805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612485565b6101305460ff16156121695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c49565b6001600160a01b0382166000908152610199602052604090206004015460ff161561257f5760405162461bcd60e51b8152602060048201526012602482015271616c7265616479206861732073746174757360701b6044820152606401610c49565b600161019660008282546125939190613c4f565b90915550506001600160a01b038216600090815261019960209081526040808320600481018054426001808501829055908455600390930187905564ffffffffff1916909117905561019b909152902080546001600160a01b0319169055813b15612612576001610197600082825461260c9190613c4f565b90915550505b6040516001600160a01b038316907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a25050565b6001600160a01b0381166000908152610199602052604090206004015460ff166001148061269757506001600160a01b0381166000908152610199602052604090206004015460ff166002145b1561283757600161019660008282546126b09190613a2a565b9091555050803b151580156126c85750600061019754115b156126e757600161019760008282546126e19190613a2a565b90915550505b6001600160a01b038116600090815261019960205260408120600201805461270e90613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461273a90613b06565b80156127875780601f1061275c57610100808354040283529160200191612787565b820191906000526020600020905b81548152906001019060200180831161276a57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152610199909252604082208281556001810183905595965094935091506127ce905060028301826134f7565b506000600382018190556004909101805464ffffffffff1916905581815261019a602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a250505b61019c546001600160a01b0316158015906128bf575061019c54604051633af32abf60e01b81526001600160a01b0390911690633af32abf9061287e908490600401613763565b602060405180830381865afa15801561289b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bf9190613ae9565b156109b75761019c5460405163291d954960e01b81526001600160a01b039091169063291d9549906128f5908490600401613763565b600060405180830381600087803b15801561290f57600080fd5b505af11580156122fb573d6000803e3d6000fd5b8151602080840191909120600081815261019a9092526040909120546001600160a01b0316156129655760405162461bcd60e51b8152600401610c4990613c62565b6001600160a01b03841660009081526101996020526040902060020161298b8482613ce0565b50600081815261019a6020526040902080546001600160a01b0319166001600160a01b038616179055611945848361251d565b606780546001600160a01b0319166001600160a01b0383161790556109b7610a8e565b6109a182825b6129f18282611782565b6109a157600082815260fe602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612a293390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a778282611782565b156109a157600082815260fe602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020613f7a833981519152546001600160a01b031690565b6109b7613033565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612b2b57610a89836130f6565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612b85575060408051601f3d908101601f19168201909252612b8291810190613c36565b60015b612be85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c49565b600080516020613f7a8339815191528114612c575760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c49565b50610a89838383613190565b6001600160a01b03163b151590565b600054610100900460ff166121695760405162461bcd60e51b8152600401610c4990613d9f565b600054610100900460ff16612cc05760405162461bcd60e51b8152600401610c4990613d9f565b610130805460ff19169055565b600054610100900460ff16612cf45760405162461bcd60e51b8152600401610c4990613d9f565b8151602092830120815191909201206101629190915561016355565b612d1982610fa6565b612d355760405162461bcd60e51b8152600401610c4990613be9565b6000815111612d725760405162461bcd60e51b815260206004820152600960248201526864696420656d70747960b81b6044820152606401610c49565b8051602080830191909120600081815261019a9092526040909120546001600160a01b031615612db45760405162461bcd60e51b8152600401610c4990613c62565b61019c546001600160a01b031615612ee65761019c546040516367c7593760e01b8152600481018390526000916001600160a01b0316906367c7593790602401602060405180830381865afa925050508015612e2d575060408051601f3d908101601f19168201909252612e2a918101906139f7565b60015b15612e355790505b6001600160a01b0381161580612e5c5750836001600160a01b0316816001600160a01b0316145b80612e8d57506001600160a01b0381166000908152610199602052604081206002018054612e8990613b06565b9050115b612ee45760405162461bcd60e51b815260206004820152602260248201527f44494420616c72656164792072656769737465726564206f6c644964656e7469604482015261747960f01b6064820152608401610c49565b505b6001600160a01b038316600090815261019960205260408082209051612f0f9160020190613dea565b6040805191829003909120600081815261019a602090815283822080546001600160a01b03191690556001600160a01b0388168252610199905291909120909150600201612f5d8482613ce0565b5050600090815261019a6020526040902080546001600160a01b0319166001600160a01b03939093169290921790915550565b612f9a8282611782565b6109a157612fa7816131b5565b612fb28360206131c7565b604051602001612fc3929190613e60565b60408051601f198184030181529082905262461bcd60e51b8252610c4991600401613750565b6101305460ff166121695760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c49565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561307c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a091906139f7565b6001600160a01b0316146121695760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610c49565b6130ff81612c63565b6131615760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c49565b600080516020613f7a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61319983613362565b6000825111806131a65750805b15610a895761194583836133a2565b60606109756001600160a01b03831660145b606060006131d6836002613ecf565b6131e1906002613c4f565b6001600160401b038111156131f8576131f86135cd565b6040519080825280601f01601f191660200182016040528015613222576020820181803683370190505b509050600360fc1b8160008151811061323d5761323d613a3d565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061326c5761326c613a3d565b60200101906001600160f81b031916908160001a9053506000613290846002613ecf565b61329b906001613c4f565b90505b6001811115613313576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106132cf576132cf613a3d565b1a60f81b8282815181106132e5576132e5613a3d565b60200101906001600160f81b031916908160001a90535060049490941c9361330c81613ee6565b905061329e565b5083156110a05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c49565b61336b816130f6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606133ad83612c63565b6134085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610c49565b600080846001600160a01b0316846040516134239190613efd565b600060405180830381855af49150503d806000811461345e576040519150601f19603f3d011682016040523d82523d6000602084013e613463565b606091505b509150915061348b8282604051806060016040528060278152602001613fe160279139613494565b95945050505050565b606083156134a35750816110a0565b6110a083838151156134b85781518083602001fd5b8060405162461bcd60e51b8152600401610c499190613750565b5080546000825560070160089004906000526020600020908101906109b7919061352d565b50805461350390613b06565b6000825580601f10613513575050565b601f0160209004906000526020600020908101906109b791905b5b80821115613542576000815560010161352e565b5090565b60006020828403121561355857600080fd5b81356001600160e01b0319811681146110a057600080fd5b80151581146109b757600080fd5b60006020828403121561359057600080fd5b81356110a081613570565b6001600160a01b03811681146109b757600080fd5b6000602082840312156135c257600080fd5b81356110a08161359b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561360b5761360b6135cd565b604052919050565b60006001600160401b0382111561362c5761362c6135cd565b50601f01601f191660200190565b600061364d61364884613613565b6135e3565b905082815283838301111561366157600080fd5b828260208301376000602084830101529392505050565b600082601f83011261368957600080fd5b6110a08383356020850161363a565b600080604083850312156136ab57600080fd5b82356136b68161359b565b915060208301356001600160401b038111156136d157600080fd5b6136dd85828601613678565b9150509250929050565b6000602082840312156136f957600080fd5b5035919050565b60005b8381101561371b578181015183820152602001613703565b50506000910152565b6000815180845261373c816020860160208601613700565b601f01601f19169290920160200192915050565b6020815260006110a06020830184613724565b6001600160a01b0391909116815260200190565b6000806040838503121561378a57600080fd5b82359150602083013561379c8161359b565b809150509250929050565b600080604083850312156137ba57600080fd5b82356137c58161359b565b9150602083013561379c8161359b565b600080604083850312156137e857600080fd5b82356137f38161359b565b946020939093013593505050565b6000806040838503121561381457600080fd5b823561381f8161359b565b915060208301356001600160401b0381111561383a57600080fd5b8301601f8101851361384b57600080fd5b6136dd8582356020840161363a565b6000806020838503121561386d57600080fd5b82356001600160401b038082111561388457600080fd5b818501915085601f83011261389857600080fd5b8135818111156138a757600080fd5b8660208260051b85010111156138bc57600080fd5b60209290920196919550909350505050565b6000806000604084860312156138e357600080fd5b83356138ee8161359b565b925060208401356001600160401b038082111561390a57600080fd5b818601915086601f83011261391e57600080fd5b81358181111561392d57600080fd5b87602082850101111561393f57600080fd5b6020830194508093505050509250925092565b6000806000806080858703121561396857600080fd5b84356139738161359b565b935060208501356001600160401b0381111561398e57600080fd5b61399a87828801613678565b949794965050505060408301359260600135919050565b86815285602082015260c0604082015260006139d060c0830187613724565b60608301959095525060ff92909216608083015263ffffffff1660a0909101529392505050565b600060208284031215613a0957600080fd5b81516110a08161359b565b634e487b7160e01b600052601160045260246000fd5b8181038181111561097557610975613a14565b634e487b7160e01b600052603260045260246000fd5b6020808252602c90820152600080516020613f3a83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020613f3a83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600082613ae457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613afb57600080fd5b81516110a081613570565b600181811c90821680613b1a57607f821691505b602082108103613b3a57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b5257600080fd5b81516001600160401b03811115613b6857600080fd5b8201601f81018413613b7957600080fd5b8051613b8761364882613613565b818152856020838501011115613b9c57600080fd5b61348b826020830160208601613700565b600060208284031215613bbf57600080fd5b813560ff811681146110a057600080fd5b600060018201613be257613be2613a14565b5060010190565b6020808252600f908201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b63ffffffff818116838216019080821115613c2f57613c2f613a14565b5092915050565b600060208284031215613c4857600080fd5b5051919050565b8082018082111561097557610975613a14565b60208082526016908201527511125108185b1c9958591e481c9959da5cdd195c995960521b604082015260600190565b601f821115610a8957600081815260208120601f850160051c81016020861015613cb95750805b601f850160051c820191505b81811015613cd857828155600101613cc5565b505050505050565b81516001600160401b03811115613cf957613cf96135cd565b613d0d81613d078454613b06565b84613c92565b602080601f831160018114613d425760008415613d2a5750858301515b600019600386901b1c1916600185901b178555613cd8565b600085815260208120601f198616915b82811015613d7157888601518255948401946001909101908401613d52565b5085821015613d8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808354613df881613b06565b60018281168015613e105760018114613e2557613e54565b60ff1984168752821515830287019450613e54565b8760005260208060002060005b85811015613e4b5781548a820152908401908201613e32565b50505082870194505b50929695505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613e92816017850160208801613700565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613ec3816028840160208801613700565b01602801949350505050565b808202811582820484141761097557610975613a14565b600081613ef557613ef5613a14565b506000190190565b60008251613f0f818460208701613700565b919091019291505056fe091941537c453917ef5b0c67f46f29060aca926ebd752fe441d5625e85c3a57646756e6374696f6e206d7573742062652063616c6c6564207468726f756768200b0f1f48172a2124d5545a38711e7e9d2e7a6c0b46b85cf1c1788e7a11ba5bf2360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc436f6e6e6563744964656e7469747928616464726573732077686974656c69737465642c6164647265737320636f6e6e65637465642c75696e7432353620646561646c696e6529416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045ce99f6d47449f241f482abfdbd309694d4f1a1c9acea93ddfef1fe1b2bc17464736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106102655760003560e01c806301ffc9a71461026a57806302329a291461029f57806308e0d29d146102c157806310154bad146102e1578063188efc16146103015780631aaff63c146103215780631b027099146103515780631b3c90a8146103715780632236684414610386578063248a9ca31461039a578063291d9549146103ba5780632b14dda8146103da5780632cec5330146103fa5780632d0e9b461461041c5780632f2ff15d1461044957806331b376e21461046957806336568abe1461047e5780633659cfe61461049e57806337a1a987146104be5780633af32abf146104de5780633e6326fc146104fe5780634125f0f21461051e5780634162169f1461053f578063485cc9551461055f5780634a03813f1461057f5780634f1ef2861461059f57806352d1902d146105b257806354f9f7a3146105c75780635aef7de6146105e75780635c975abb146106075780635f539d6914610620578063613200401461064057806367c759371461067757806391d14854146106ae578063925e8c1a146106ce57806396a1ef79146106ee578063a061922d1461070e578063a217fddf1461072e578063b2a1de2214610743578063b30f7e7f1461075a578063c375c2ef14610771578063c6a276c214610791578063c73cc4ae146107b1578063cadef5ac146107d1578063d21685f414610806578063d326281614610826578063d547741f14610846578063d6cd947314610866578063e1758bd81461087b578063e1e360ba14610890578063e63ab1e9146108b0578063e737031a146108d2578063f653b81e146108f2578063fe575a8714610924575b600080fd5b34801561027657600080fd5b5061028a610285366004613546565b610944565b60405190151581526020015b60405180910390f35b3480156102ab57600080fd5b506102bf6102ba36600461357e565b61097b565b005b3480156102cd57600080fd5b506102bf6102dc3660046135b0565b6109ad565b3480156102ed57600080fd5b506102bf6102fc3660046135b0565b6109ba565b34801561030d57600080fd5b506102bf61031c3660046135b0565b6109e4565b34801561032d57600080fd5b50610343600080516020613f1a83398151915281565b604051908152602001610296565b34801561035d57600080fd5b506102bf61036c366004613698565b610a5e565b34801561037d57600080fd5b506102bf610a8e565b34801561039257600080fd5b50600161028a565b3480156103a657600080fd5b506103436103b53660046136e7565b610bb5565b3480156103c657600080fd5b506102bf6103d53660046135b0565b610bca565b3480156103e657600080fd5b506102bf6103f53660046135b0565b610bf3565b34801561040657600080fd5b5061040f610cbd565b6040516102969190613750565b34801561042857600080fd5b5061043c6104373660046135b0565b610cd9565b6040516102969190613763565b34801561045557600080fd5b506102bf610464366004613777565b610d3f565b34801561047557600080fd5b50610343610d5b565b34801561048a57600080fd5b506102bf610499366004613777565b610da9565b3480156104aa57600080fd5b506102bf6104b93660046135b0565b610e23565b3480156104ca57600080fd5b506102bf6104d93660046135b0565b610ee8565b3480156104ea57600080fd5b5061028a6104f93660046135b0565b610fa6565b34801561050a57600080fd5b5060675461043c906001600160a01b031681565b34801561052a57600080fd5b5061019c5461043c906001600160a01b031681565b34801561054b57600080fd5b5060655461043c906001600160a01b031681565b34801561056b57600080fd5b506102bf61057a3660046137a7565b6110b0565b34801561058b57600080fd5b5061028a61059a3660046137d5565b611318565b6102bf6105ad366004613801565b6113c2565b3480156105be57600080fd5b50610343611477565b3480156105d357600080fd5b5061040f6105e23660046135b0565b611525565b3480156105f357600080fd5b5060665461043c906001600160a01b031681565b34801561061357600080fd5b506101305460ff1661028a565b34801561062c57600080fd5b506102bf61063b3660046135b0565b6116b9565b34801561064c57600080fd5b5061043c61065b3660046135b0565b61019b602052600090815260409020546001600160a01b031681565b34801561068357600080fd5b5061043c6106923660046136e7565b61019a602052600090815260409020546001600160a01b031681565b3480156106ba57600080fd5b5061028a6106c9366004613777565b611782565b3480156106da57600080fd5b506102bf6106e936600461385a565b6117ad565b3480156106fa57600080fd5b506102bf6107093660046137d5565b61194b565b34801561071a57600080fd5b506103436107293660046135b0565b611b6c565b34801561073a57600080fd5b50610343600081565b34801561074f57600080fd5b506103436101965481565b34801561076657600080fd5b506103436101975481565b34801561077d57600080fd5b506102bf61078c3660046135b0565b611b99565b34801561079d57600080fd5b506102bf6107ac3660046135b0565b611ceb565b3480156107bd57600080fd5b5061028a6107cc3660046135b0565b611e4a565b3480156107dd57600080fd5b506107f16107ec3660046136e7565b611f01565b60405163ffffffff9091168152602001610296565b34801561081257600080fd5b506102bf6108213660046135b0565b611f3c565b34801561083257600080fd5b506102bf6108413660046138ce565b612070565b34801561085257600080fd5b506102bf610861366004613777565b612117565b34801561087257600080fd5b506102bf612133565b34801561088757600080fd5b5061043c61216b565b34801561089c57600080fd5b506103436108ab3660046135b0565b6121f8565b3480156108bc57600080fd5b50610343600080516020613f5a83398151915281565b3480156108de57600080fd5b506102bf6108ed366004613952565b6122ad565b3480156108fe57600080fd5b5061091261090d3660046135b0565b612302565b604051610296969594939291906139b1565b34801561093057600080fd5b5061028a61093f3660046135b0565b6123ca565b60006001600160e01b03198216637965db0b60e01b148061097557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020613f5a8339815191526109938161243d565b81156109a5576109a1612447565b5050565b6109a161249c565b6109b7814261194b565b50565b600080516020613f1a8339815191526109d28161243d565b6109da6124d6565b6109a1824661251d565b600080516020613f1a8339815191526109fc8161243d565b610a046124d6565b610a0d8261264a565b6001600160a01b03821660008181526101996020526040808220600401805460ff191660ff179055517f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b8789679190a25050565b600080516020613f1a833981519152610a768161243d565b610a7e6124d6565b610a89838346612923565b505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1591906139f7565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9391906139f7565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600090815260fe602052604090206001015490565b600080516020613f1a833981519152610be28161243d565b610bea6124d6565b6109a18261264a565b6000610bfe8161243d565b6067546001600160a01b031615610c525760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b610c5b826129be565b606654610c73906000906001600160a01b03166129e1565b606654610c9890600080516020613f5a833981519152906001600160a01b03166129e1565b6066546109a190600080516020613f1a833981519152906001600160a01b03166129e1565b604051806080016040528060478152602001613f9a6047913981565b6000610ce482610fa6565b15610ced575090565b6001600160a01b03808316600090815261019b6020526040902054610d129116610fa6565b15610d3757506001600160a01b03908116600090815261019b60205260409020541690565b506000919050565b610d4882610bb5565b610d518161243d565b610a8983836129e7565b61019d805460009190610d7090600190613a2a565b81548110610d8057610d80613a3d565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16919050565b6001600160a01b0381163314610e195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c49565b6109a18282612a6d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e6b5760405162461bcd60e51b8152600401610c4990613a53565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e9d612ad4565b6001600160a01b031614610ec35760405162461bcd60e51b8152600401610c4990613a8d565b610ecc81612af0565b604080516000808252602082019092526109b791839190612af8565b6001600160a01b03818116600090815261019b602052604090205416331480610f195750336001600160a01b038216145b610f545760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b6044820152606401610c49565b6001600160a01b038116600081815261019b602052604080822080546001600160a01b0319169055513392917f7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d291a350565b6001600160a01b0381166000908152610199602052604081205481906201518090610fd19042613a2a565b610fdb9190613ac7565b6001600160a01b0384166000908152610199602052604090206004015490915060ff166001036110175761100f8382611318565b159392505050565b61019c546001600160a01b0316156110a75761019c54604051633af32abf60e01b81526001600160a01b0390911690633af32abf9061105a908690600401613763565b602060405180830381865afa925050508015611093575060408051601f3d908101601f1916820190925261109091810190613ae9565b60015b6110a05750600092915050565b9392505050565b50600092915050565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110f157506110df30612c63565b1580156110f1575060005460ff166001145b6111545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c49565b6000805460ff191660011790558015611177576000805461ff0019166101001790555b61117f612c72565b611187612c99565b6111ce604051806040016040528060088152602001674964656e7469747960c01b815250604051806040016040528060058152602001640312e302e360dc1b815250612ccd565b6111d96000846129e1565b6111f1600080516020613f5a833981519152846129e1565b611209600080516020613f1a833981519152846129e1565b61019c80546001600160a01b0384166001600160a01b031990911617905561019d805460018181018355600083905260088083047f71880bb8535eda3be1bc3614789b84ba72ab02d5ae26ba282fa1178bb7fea1e6908101805463ffffffff60046007978816810261010090810a8381021990941690931790935587548087018955858104850180549189168502840a808a0290840219909216919091179055875495860190975592840490910180549390941602900a60b48102930219169190911790558015610a89576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b0382166000908152610199602052604081206004810154905461010090910463ffffffff16906369a937e611156113635761019d5461136090600190613a2a565b90505b600061019d8263ffffffff168154811061137f5761137f613a3d565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1690508084106113b757600192505050610975565b506000949350505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361140a5760405162461bcd60e51b8152600401610c4990613a53565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661143c612ad4565b6001600160a01b0316146114625760405162461bcd60e51b8152600401610c4990613a8d565b61146b82612af0565b6109a182826001612af8565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115125760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610c49565b50600080516020613f7a83398151915290565b6001600160a01b03811660009081526101996020526040902060020180546060919061155090613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461157c90613b06565b80156115c95780601f1061159e576101008083540402835291602001916115c9565b820191906000526020600020905b8154815290600101906020018083116115ac57829003601f168201915b50508351602080860191909120600081815261019a909252604090912054949550936001600160a01b0380881691160392506116089150505750919050565b61019c546001600160a01b0316156116a35761019c546040516354f9f7a360e01b81526001600160a01b03909116906354f9f7a39061164b908690600401613763565b600060405180830381865afa92505050801561168957506040513d6000823e601f3d908101601f191682016040526116869190810190613b40565b60015b6110a0575050604080516020810190915260008152919050565b5050604080516020810190915260008152919050565b600080516020613f1a8339815191526116d18161243d565b6116d96124d6565b813b6117275760405162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e7472616374006044820152606401610c49565b611731824661251d565b6001600160a01b03821660008181526101996020526040808220600401805460ff19166002179055517f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e2059190a25050565b600091825260fe602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613f1a8339815191526117c58161243d565b816118025760405162461bcd60e51b815260206004820152600d60248201526c656d707479206f7074696f6e7360981b6044820152606401610c49565b61180f61019d60006134d2565b60005b82811015611945578015806118825750838361182f600184613a2a565b81811061183e5761183e613a3d565b90506020020160208101906118539190613bad565b60ff1684848381811061186857611868613a3d565b905060200201602081019061187d9190613bad565b60ff16115b6118ce5760405162461bcd60e51b815260206004820152601e60248201527f6f7074696f6e73206e6f7420696e20617363656e64696e67206f7264657200006044820152606401610c49565b61019d8484838181106118e3576118e3613a3d565b90506020020160208101906118f89190613bad565b8154600181018355600092835260209092206008830401805463ffffffff60079094166004026101000a938402191660ff929092169092021790558061193d81613bd0565b915050611812565b50505050565b600080516020613f1a8339815191526119638161243d565b61196b6124d6565b6001600160a01b0383166000908152610199602052604090206004015460ff166001146119aa5760405162461bcd60e51b8152600401610c4990613be9565b6001600160a01b0383166000908152610199602052604081205462015180906119d39085613a2a565b6119dd9190613ac7565b6001600160a01b038516600090815261019960205260409020549091506369a937e61115611a515761019d54611a1590600190613a2a565b6001600160a01b038516600090815261019960205260409020600401805463ffffffff929092166101000264ffffffff00199092169190911790555b611a5b8482611318565b15611b10576001600160a01b0384166000908152610199602052604090206004018054600191908290611a9a908290610100900463ffffffff16613c12565b825463ffffffff91821661010093840a908102908302199091161790925561019d546001600160a01b0388166000908152610199602052604090206004015491909104909116109050611b10576001600160a01b038416600090815261019960205260409020600401805464ffffffff00191690555b6001600160a01b0384166000818152610199602052604090819020859055517fb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f50090611b5e9086815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152610199602052604090206003015480611b945746610975565b919050565b600080516020613f1a833981519152611bb18161243d565b611bb96124d6565b61019c546001600160a01b031615801590611c41575061019c5460405163639e625760e11b81526001600160a01b039091169063c73cc4ae90611c00908590600401613763565b602060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c419190613ae9565b15611caa5761019c5460405163c375c2ef60e01b81526001600160a01b039091169063c375c2ef90611c77908590600401613763565b600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050505b611cb38261264a565b6040516001600160a01b038316907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a25050565b600080516020613f1a833981519152611d038161243d565b611d0b6124d6565b61019c546001600160a01b031615801590611d93575061019c5460405163fe575a8760e01b81526001600160a01b039091169063fe575a8790611d52908590600401613763565b602060405180830381865afa158015611d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d939190613ae9565b15611dfc5761019c546040516363513b6160e11b81526001600160a01b039091169063c6a276c290611dc9908590600401613763565b600060405180830381600087803b158015611de357600080fd5b505af1158015611df7573d6000803e3d6000fd5b505050505b6001600160a01b03821660008181526101996020526040808220600401805460ff19169055517f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde89190a25050565b6001600160a01b0381166000908152610199602052604081206004015460ff16600203611e7957506001919050565b61019c546001600160a01b031615610d375761019c5460405163639e625760e11b81526001600160a01b039091169063c73cc4ae90611ebc908590600401613763565b602060405180830381865afa925050508015611ef5575060408051601f3d908101601f19168201909252611ef291810190613ae9565b60015b61097557506000919050565b61019d8181548110611f1257600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b611f4533610fa6565b611f615760405162461bcd60e51b8152600401610c4990613be9565b611f6a81610fa6565b158015611f7d5750611f7b816123ca565b155b611fbb5760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a59081858d8dbdd5b9d608a1b6044820152606401610c49565b6001600160a01b03818116600090815261019b602052604090205416156120185760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb9b9958dd1959607a1b6044820152606401610c49565b6001600160a01b038116600081815261019b602052604080822080546001600160a01b0319163390811790915590519092917f18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c91a350565b336001600160a01b038416148061209a575061209a600080516020613f1a83398151915233611782565b6120d75760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610c49565b610a898383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d1092505050565b61212082610bb5565b6121298161243d565b610a898383612a6d565b61213b6124d6565b61214433610fa6565b6121605760405162461bcd60e51b8152600401610c4990613be9565b6121693361264a565b565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f391906139f7565b905090565b6001600160a01b038116600090815261019960205260408120541561223457506001600160a01b03166000908152610199602052604090205490565b61019c546001600160a01b031615610d375761019c546040516370f1b05d60e11b81526001600160a01b039091169063e1e360ba90612277908590600401613763565b602060405180830381865afa925050508015611ef5575060408051601f3d908101601f19168201909252611ef291810190613c36565b600080516020613f1a8339815191526122c58161243d565b6122cd6124d6565b6122d8858585612923565b81156122fb576001600160a01b0385166000908152610199602052604090208290555b5050505050565b610199602052600090815260409020805460018201546002830180549293919261232b90613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461235790613b06565b80156123a45780601f10612379576101008083540402835291602001916123a4565b820191906000526020600020905b81548152906001019060200180831161238757829003601f168201915b50505050600383015460049093015491929160ff81169150610100900463ffffffff1686565b6001600160a01b0381166000908152610199602052604081206004015460ff90811690036123fa57506001919050565b61019c546001600160a01b031615610d375761019c5460405163fe575a8760e01b81526001600160a01b039091169063fe575a8790611ebc908590600401613763565b6109b78133612f90565b61244f6124d6565b610130805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124853390565b6040516124929190613763565b60405180910390a1565b6124a4612fe9565b610130805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612485565b6101305460ff16156121695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c49565b6001600160a01b0382166000908152610199602052604090206004015460ff161561257f5760405162461bcd60e51b8152602060048201526012602482015271616c7265616479206861732073746174757360701b6044820152606401610c49565b600161019660008282546125939190613c4f565b90915550506001600160a01b038216600090815261019960209081526040808320600481018054426001808501829055908455600390930187905564ffffffffff1916909117905561019b909152902080546001600160a01b0319169055813b15612612576001610197600082825461260c9190613c4f565b90915550505b6040516001600160a01b038316907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a25050565b6001600160a01b0381166000908152610199602052604090206004015460ff166001148061269757506001600160a01b0381166000908152610199602052604090206004015460ff166002145b1561283757600161019660008282546126b09190613a2a565b9091555050803b151580156126c85750600061019754115b156126e757600161019760008282546126e19190613a2a565b90915550505b6001600160a01b038116600090815261019960205260408120600201805461270e90613b06565b80601f016020809104026020016040519081016040528092919081815260200182805461273a90613b06565b80156127875780601f1061275c57610100808354040283529160200191612787565b820191906000526020600020905b81548152906001019060200180831161276a57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152610199909252604082208281556001810183905595965094935091506127ce905060028301826134f7565b506000600382018190556004909101805464ffffffffff1916905581815261019a602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a250505b61019c546001600160a01b0316158015906128bf575061019c54604051633af32abf60e01b81526001600160a01b0390911690633af32abf9061287e908490600401613763565b602060405180830381865afa15801561289b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bf9190613ae9565b156109b75761019c5460405163291d954960e01b81526001600160a01b039091169063291d9549906128f5908490600401613763565b600060405180830381600087803b15801561290f57600080fd5b505af11580156122fb573d6000803e3d6000fd5b8151602080840191909120600081815261019a9092526040909120546001600160a01b0316156129655760405162461bcd60e51b8152600401610c4990613c62565b6001600160a01b03841660009081526101996020526040902060020161298b8482613ce0565b50600081815261019a6020526040902080546001600160a01b0319166001600160a01b038616179055611945848361251d565b606780546001600160a01b0319166001600160a01b0383161790556109b7610a8e565b6109a182825b6129f18282611782565b6109a157600082815260fe602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612a293390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a778282611782565b156109a157600082815260fe602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020613f7a833981519152546001600160a01b031690565b6109b7613033565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612b2b57610a89836130f6565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612b85575060408051601f3d908101601f19168201909252612b8291810190613c36565b60015b612be85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c49565b600080516020613f7a8339815191528114612c575760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c49565b50610a89838383613190565b6001600160a01b03163b151590565b600054610100900460ff166121695760405162461bcd60e51b8152600401610c4990613d9f565b600054610100900460ff16612cc05760405162461bcd60e51b8152600401610c4990613d9f565b610130805460ff19169055565b600054610100900460ff16612cf45760405162461bcd60e51b8152600401610c4990613d9f565b8151602092830120815191909201206101629190915561016355565b612d1982610fa6565b612d355760405162461bcd60e51b8152600401610c4990613be9565b6000815111612d725760405162461bcd60e51b815260206004820152600960248201526864696420656d70747960b81b6044820152606401610c49565b8051602080830191909120600081815261019a9092526040909120546001600160a01b031615612db45760405162461bcd60e51b8152600401610c4990613c62565b61019c546001600160a01b031615612ee65761019c546040516367c7593760e01b8152600481018390526000916001600160a01b0316906367c7593790602401602060405180830381865afa925050508015612e2d575060408051601f3d908101601f19168201909252612e2a918101906139f7565b60015b15612e355790505b6001600160a01b0381161580612e5c5750836001600160a01b0316816001600160a01b0316145b80612e8d57506001600160a01b0381166000908152610199602052604081206002018054612e8990613b06565b9050115b612ee45760405162461bcd60e51b815260206004820152602260248201527f44494420616c72656164792072656769737465726564206f6c644964656e7469604482015261747960f01b6064820152608401610c49565b505b6001600160a01b038316600090815261019960205260408082209051612f0f9160020190613dea565b6040805191829003909120600081815261019a602090815283822080546001600160a01b03191690556001600160a01b0388168252610199905291909120909150600201612f5d8482613ce0565b5050600090815261019a6020526040902080546001600160a01b0319166001600160a01b03939093169290921790915550565b612f9a8282611782565b6109a157612fa7816131b5565b612fb28360206131c7565b604051602001612fc3929190613e60565b60408051601f198184030181529082905262461bcd60e51b8252610c4991600401613750565b6101305460ff166121695760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c49565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561307c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a091906139f7565b6001600160a01b0316146121695760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610c49565b6130ff81612c63565b6131615760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c49565b600080516020613f7a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61319983613362565b6000825111806131a65750805b15610a895761194583836133a2565b60606109756001600160a01b03831660145b606060006131d6836002613ecf565b6131e1906002613c4f565b6001600160401b038111156131f8576131f86135cd565b6040519080825280601f01601f191660200182016040528015613222576020820181803683370190505b509050600360fc1b8160008151811061323d5761323d613a3d565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061326c5761326c613a3d565b60200101906001600160f81b031916908160001a9053506000613290846002613ecf565b61329b906001613c4f565b90505b6001811115613313576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106132cf576132cf613a3d565b1a60f81b8282815181106132e5576132e5613a3d565b60200101906001600160f81b031916908160001a90535060049490941c9361330c81613ee6565b905061329e565b5083156110a05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c49565b61336b816130f6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606133ad83612c63565b6134085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610c49565b600080846001600160a01b0316846040516134239190613efd565b600060405180830381855af49150503d806000811461345e576040519150601f19603f3d011682016040523d82523d6000602084013e613463565b606091505b509150915061348b8282604051806060016040528060278152602001613fe160279139613494565b95945050505050565b606083156134a35750816110a0565b6110a083838151156134b85781518083602001fd5b8060405162461bcd60e51b8152600401610c499190613750565b5080546000825560070160089004906000526020600020908101906109b7919061352d565b50805461350390613b06565b6000825580601f10613513575050565b601f0160209004906000526020600020908101906109b791905b5b80821115613542576000815560010161352e565b5090565b60006020828403121561355857600080fd5b81356001600160e01b0319811681146110a057600080fd5b80151581146109b757600080fd5b60006020828403121561359057600080fd5b81356110a081613570565b6001600160a01b03811681146109b757600080fd5b6000602082840312156135c257600080fd5b81356110a08161359b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561360b5761360b6135cd565b604052919050565b60006001600160401b0382111561362c5761362c6135cd565b50601f01601f191660200190565b600061364d61364884613613565b6135e3565b905082815283838301111561366157600080fd5b828260208301376000602084830101529392505050565b600082601f83011261368957600080fd5b6110a08383356020850161363a565b600080604083850312156136ab57600080fd5b82356136b68161359b565b915060208301356001600160401b038111156136d157600080fd5b6136dd85828601613678565b9150509250929050565b6000602082840312156136f957600080fd5b5035919050565b60005b8381101561371b578181015183820152602001613703565b50506000910152565b6000815180845261373c816020860160208601613700565b601f01601f19169290920160200192915050565b6020815260006110a06020830184613724565b6001600160a01b0391909116815260200190565b6000806040838503121561378a57600080fd5b82359150602083013561379c8161359b565b809150509250929050565b600080604083850312156137ba57600080fd5b82356137c58161359b565b9150602083013561379c8161359b565b600080604083850312156137e857600080fd5b82356137f38161359b565b946020939093013593505050565b6000806040838503121561381457600080fd5b823561381f8161359b565b915060208301356001600160401b0381111561383a57600080fd5b8301601f8101851361384b57600080fd5b6136dd8582356020840161363a565b6000806020838503121561386d57600080fd5b82356001600160401b038082111561388457600080fd5b818501915085601f83011261389857600080fd5b8135818111156138a757600080fd5b8660208260051b85010111156138bc57600080fd5b60209290920196919550909350505050565b6000806000604084860312156138e357600080fd5b83356138ee8161359b565b925060208401356001600160401b038082111561390a57600080fd5b818601915086601f83011261391e57600080fd5b81358181111561392d57600080fd5b87602082850101111561393f57600080fd5b6020830194508093505050509250925092565b6000806000806080858703121561396857600080fd5b84356139738161359b565b935060208501356001600160401b0381111561398e57600080fd5b61399a87828801613678565b949794965050505060408301359260600135919050565b86815285602082015260c0604082015260006139d060c0830187613724565b60608301959095525060ff92909216608083015263ffffffff1660a0909101529392505050565b600060208284031215613a0957600080fd5b81516110a08161359b565b634e487b7160e01b600052601160045260246000fd5b8181038181111561097557610975613a14565b634e487b7160e01b600052603260045260246000fd5b6020808252602c90820152600080516020613f3a83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020613f3a83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600082613ae457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613afb57600080fd5b81516110a081613570565b600181811c90821680613b1a57607f821691505b602082108103613b3a57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b5257600080fd5b81516001600160401b03811115613b6857600080fd5b8201601f81018413613b7957600080fd5b8051613b8761364882613613565b818152856020838501011115613b9c57600080fd5b61348b826020830160208601613700565b600060208284031215613bbf57600080fd5b813560ff811681146110a057600080fd5b600060018201613be257613be2613a14565b5060010190565b6020808252600f908201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b63ffffffff818116838216019080821115613c2f57613c2f613a14565b5092915050565b600060208284031215613c4857600080fd5b5051919050565b8082018082111561097557610975613a14565b60208082526016908201527511125108185b1c9958591e481c9959da5cdd195c995960521b604082015260600190565b601f821115610a8957600081815260208120601f850160051c81016020861015613cb95750805b601f850160051c820191505b81811015613cd857828155600101613cc5565b505050505050565b81516001600160401b03811115613cf957613cf96135cd565b613d0d81613d078454613b06565b84613c92565b602080601f831160018114613d425760008415613d2a5750858301515b600019600386901b1c1916600185901b178555613cd8565b600085815260208120601f198616915b82811015613d7157888601518255948401946001909101908401613d52565b5085821015613d8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808354613df881613b06565b60018281168015613e105760018114613e2557613e54565b60ff1984168752821515830287019450613e54565b8760005260208060002060005b85811015613e4b5781548a820152908401908201613e32565b50505082870194505b50929695505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613e92816017850160208801613700565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613ec3816028840160208801613700565b01602801949350505050565b808202811582820484141761097557610975613a14565b600081613ef557613ef5613a14565b506000190190565b60008251613f0f818460208701613700565b919091019291505056fe091941537c453917ef5b0c67f46f29060aca926ebd752fe441d5625e85c3a57646756e6374696f6e206d7573742062652063616c6c6564207468726f756768200b0f1f48172a2124d5545a38711e7e9d2e7a6c0b46b85cf1c1788e7a11ba5bf2360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc436f6e6e6563744964656e7469747928616464726573732077686974656c69737465642c6164647265737320636f6e6e65637465642c75696e7432353620646561646c696e6529416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122045ce99f6d47449f241f482abfdbd309694d4f1a1c9acea93ddfef1fe1b2bc17464736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
